Dodawanie wartości dziesiętnych do lokalnej bazy danych

Odpowiedz Nowy wątek
2017-01-19 17:00

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

0

Witam, tak jak w temacie mam problem z dodaniem wartości dziesiętnych do bazy. Połączenie i dodawanie wartości całkowitych działa, w bazie ustawione rekordy liczbowe na typ Float. Problem: gdy próbuje dodać do bazy np. fat = 2,1 to wyskakuje błąd "error converting data type varchar to float" . Jest jakiś sposób aby to zadziałało ?
Kod:

 private void button1_Click(object sender, EventArgs e)
        {
            try
            { 

                if (name.Text != "" & protein.Text != "" & carbs.Text != "" & fat.Text != "" & kcal.Text != "")
                {
                    cn.Open();
                    cmd.CommandText = "INSERT INTO products (prod_name, protein, carbs, fat, kcal) values ( N'" + name.Text + "','" + Convert.ToDouble(protein.Text) + "','" + Convert.ToDouble(carbs.Text) + "','" + Convert.ToDouble(fat.Text) + "','" + Convert.ToDouble(kcal.Text) + "')";
                    cmd.ExecuteNonQuery();
                    cmd.Clone();
                    MessageBox.Show("Pomyślne dodanie produktu!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    cn.Close();
                    name.Text = "";
                    protein.Text = "";
                    carbs.Text = "";
                    fat.Text = "";
                    kcal.Text = "";
                    loadlist();

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {

                cn.Close();
            }

        }
edytowany 2x, ostatnio: DibbyDum, 2017-01-20 15:08

Pozostało 580 znaków

2017-01-19 18:13
Moderator

Rejestracja: 12 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Wrocław

1

Zapewne wstawiasz dane z przecinkiem, podczas gdy baza oczekuje kropki jako separatora części dziesiętnych.


edytowany 1x, ostatnio: Patryk27, 2017-01-19 18:14

Pozostało 580 znaków

2017-01-19 18:16

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

0

Jak wpiszę z "kropką" to wyskakuje, że "nieprawidłowy format ciągu wyjściowego"

Pozostało 580 znaków

gg
2017-01-19 18:17
gg

Rejestracja: 4 lata temu

Ostatnio: 11 godzin temu

Lokalizacja: Kraków

0

Wyrzuć sobie string zapytania SQL do konsoli to zobaczysz gdzie jest problem.
Pewnie masz problem z tym, że liczbę zmiennoprzecinkową próbujesz zapisać z przecinkiem.

Pozostało 580 znaków

2017-01-19 18:32
Moderator

Rejestracja: 12 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Wrocław

0

Inaczej: Twój system oczekuje separatora ,, a baza danych - ., dlatego w aplikacji musisz wprowadzać liczby z przecinkiem. Ale wysyłając je do bazy danych, musisz już konwertować je z wykorzystaniem kropki.


Pozostało 580 znaków

2017-01-19 18:58

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

0

Właśnie nie w tym problem, mam dodane 2 rekordy, w których używam przecinka, ponieważ z kropką się nie da ;/

Pozostało 580 znaków

2017-01-19 21:39

Rejestracja: 7 lat temu

Ostatnio: 10 godzin temu

1

tyle się tłucze za każdym razem - NIE SKLEJAĆ ZAPYTANIA TYLKO UŻYĆ PARAMETRÓW. Już pomijam użycie jakiegoś ORMa zamiast gołych SQLi.

A ty robisz tak: bierzesz stringa, zamieniasz go na liczbę i dodajesz do stringa. Jak myślisz co się dzieje kiedy próbujesz dodać ciąg znaków i liczbę? Po co w ogóle w pierwszej kolejności zmieniasz ciąg znaków na liczbę?

I tak, przy dodawaniu do bazy LICZBA MUSI MIEĆ KROPKĘ JAKO SEPARATOR DZIESIĘTNY


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber, 2017-01-19 21:40

Pozostało 580 znaków

śmieszek
2017-01-19 21:50
śmieszek
0

Oszczędź sobie bólu z utrzymywaniem tego kodu i zamiast archaicznych commandów użyj Dappera. Poczujesz się lepiej i kod zmieścisz w 3 linijkach.

Pozostało 580 znaków

śmieszek
2017-01-19 21:53
śmieszek
0

I bogowie sqla i kodów C# dadzą Ci spokój bo Dapper wszystko zrobi, nawet zabezpieczy Ci parametry.

Pozostało 580 znaków

2017-01-19 23:14

Rejestracja: 7 lat temu

Ostatnio: 3 miesiące temu

0

@Dzaro13: próbujesz wprowadzić do bazy wartości nvarchar - tekstowe, patrz: cmd.CommandText, pomimo, że próbujesz potem rzutować wartości na double to baza i tak dostaje wartości tekstowe. Rozwiązanie jest tu użycie:

cmd.Parameters.Add(....)

to używałem przy bazie Oracle, zaś dla SQL DB winno być:

 cmd.Parameters.AddWithValue(....)

http://stackoverflow.com/ques[...]data-into-sql-server-database
http://stackoverflow.com/ques[...]-into-c-sharp-with-sqlcommand

Mam nadzieję, że to pomoże.

pozdrawiam

PS. dołączam się do wypowiedzi przedmówców, ORM to podstawa.

edytowany 2x, ostatnio: szymon7500, 2017-01-19 23:18

Pozostało 580 znaków

2017-01-20 13:58

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

0

szymon Twoja propozycja działa, ale można dodać tylko 1 rekord, a następnie wywala "variable names must be unique within a query batch or stored procedure c#" . Pobawie się z tą nazwą poźniej, chyba, że ktoś wie o co chodzi.
P.S. Jestem początkującym i nie wiedziałem że jest takie coś jak OMR, ogarne i dziękuję za uświadomienie wszystkim :)

edytowany 1x, ostatnio: Dzaro13, 2017-01-20 13:59

Pozostało 580 znaków

Odpowiedz

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