NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Dvori
Člen
Avatar
Dvori:3.1.2018 21:04

Ahoj, řeším problém se zápisem hodnoty typu float do MS-SQL databáze. Na straně SQL mám daný sloupec ve formátu float. Proměnná v C# je také typu float, ale při zápisu se mi ve VS vrací chyba, že zápis nebyl možný, jelikož hodnot pro zapsání je více než počet sloupců. Předpokládám, že problém bude někde v desetinné čárce, ale nepřišel jsem na to jak to vyřešit. SQL server je MS-SQL 2014.

Díky za typy. ;-)

private void timer_Tick(object sender, EventArgs e)
       {
private float CPU;

       CPU = performanceCounterCPU.NextValue();

       labelCPU.Text = string.Format("{0:0.00}%", CPU);
       }

private void timerSQLzapis_Tick(object sender, EventArgs e)
       {
               //zapíše hodnotu do tabulky
               conMonitoring.Open();
               SqlCommand cmdZapis = new SqlCommand("INSERT INTO " + NazevTabulky + " (CPU) VALUES(" + CPU + ")", conMonitoring);
               cmdZapis.ExecuteNonQuery();
               conMonitoring.Close();
               //úspěšný zápis do tabulky vypíše info
               labelSQLinfo1.ForeColor = System.Drawing.Color.Green;
               labelSQLinfo1.Text = "Zápis do databáze se zdařil";
               labelSQLinfo2.ForeColor = System.Drawing.Color.Green;
               labelSQLinfo2.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

       }
 
Odpovědět
3.1.2018 21:04
Avatar
Odpovídá na Dvori
don.jarducius:3.1.2018 21:16

Ahoj,
float v DB není float v C# .. v C# je to tuším double ...
https://docs.microsoft.com/…ype-mappings

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
3.1.2018 21:16
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
Odpovídá na Dvori
don.jarducius:3.1.2018 21:27

Ještě jedna věc,
pro správné vládání hodnot parametrů používej:

SqlCommand cmdZapis = new SqlCommand("INSERT INTO " + NazevTabulky + " (CPU) VALUES(@cpu)", conMonitoring);
cmdZapis.Parameters.AddWithValue("@cpu", CPU);
Nahoru Odpovědět
3.1.2018 21:27
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
plelovsky
Člen
Avatar
plelovsky:4.1.2018 10:11

Datovému typu float v .NET odpovídá real v MSSQL.
Příkaz

SqlCommand cmdZapis = new SqlCommand("INSERT INTO " + NazevTabulky + " (CPU) VALUES(" + CPU + ")", conMonitoring);

provede u objektu CPU metodu ToString() s oddělovačem des. míst podle nastaveného národního prostředí. Jestliže je to čárka, tak výsledkem jsou 2 čísla oddělené čárkou, což v SQL znamená 2 hodnoty.
Řešení je popsáno v předchozím příspěvku. Ještě to lze zpřehlednit:

SqlCommand cmdZapis = new SqlCommand($"INSERT INTO {NazevTabulky} (CPU) VALUES(@cpu)", conMonitoring);
cmdZapis.Parameters.AddWithValue("@cpu", CPU);
 
Nahoru Odpovědět
4.1.2018 10:11
Avatar
Dvori
Člen
Avatar
Dvori:4.1.2018 12:40

Díky, už to jede. Díky

 
Nahoru Odpovědět
4.1.2018 12:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.