Problem z dodawaniem rekordów do mssql

0

Mam coś takiego ... niestety jak wpisuje w miejsce textBox1.Text --- liczbe zmiennoprzecinkową dostaję błąd;
Error converting data type nvarchar to numeric.

Też jeśli w polu Kwota netto wpiszę np. 55.44 ( z kropką) wykrywa nadal po zmianie iż nie została wpisana liczba double.

 string napis = textBox1.Text;
                napis = napis.Replace(".", ",");

                double numb;
                bool result = double.TryParse(textBox1.Text, out numb);

                if (!result)
                    MessageBox.Show("Podaj kwote netto składajacą się z samych cyfr");
                else
                {
                    string sql = "INSERT into Koszty ( Data, [Kwota Netto], Opis, idPojazd) VALUES (" +
                                 "@one, @two, @tree, @four)";

                    using (SqlCommand cmd = new SqlCommand(sql, Form1.con))
                    {
                        string date2 = dateTimePicker1.Value.ToString("yyyy-MM-dd");
                        cmd.Parameters.AddWithValue("@one", date2);
                        cmd.Parameters.AddWithValue("@two", napis);
                        cmd.Parameters.AddWithValue("@tree", textBox2.Text);
                        cmd.Parameters.AddWithValue("@four", mainForm.number);

                        cmd.ExecuteNonQuery(); 
                    }
0

A masz tam zmienną numb, w której masz przecież wartość podaną jako numeric. Czemu tego nie przekazujesz, tylko stringa?

0

string napis
cmd.Parameters.AddWithValue("@two", napis); przecież przekazujesz stringa a nie liczbę

0

Aurel masz rację ale dlaczego przecież wartość w stringu jest niby taka sama czy się mylę ?
Ponadto dlaczego replace nie zmienia . na ,??

1

@up: Replace zmienia kropki na przecinki.
Wartość w stringu to nie to samo co liczba double. W pamięci komputera zmienne te są przechowywane zupełnie inaczej, dlatego też musisz rzutować z jednego typu na drugi. SqlCommand to nie string, to polecenie sql. Podając tak jak podawałeś, chciałeś wpisać stringa "123,123" w pole, które było liczbowe - a tak nie wolno. Wolno tam wpisać tylko liczbę.

0

Dzięki wielkie...
Niestety dalej mam problemy z

napis = napis.Replace(".", ",");

                double numb;
                bool result = double.TryParse(textBox1.Text, out numb);
               
                if (!result)
//nie jest to liczba double...

Ciągle ten sam błąd ... result ciągle ustawia się na false kiedy wpisuję zamiast ',' kropkę...
Dziwne jest to iż mam podobny inny kod w trakcie czego wykorzystuje Parse który działa bez problemu...

1 użytkowników online, w tym zalogowanych: 0, gości: 1