Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# - Zapis wartość float do bazy

nerx2 15 Mar 2014 13:59 1356 7
  • #1 15 Mar 2014 13:59
    nerx2
    Poziom 11  

    Witam, mam problem z zapisem wartości float do bazy SQLServer. Mam kontrolkę datagridview i dodaję sobie do niej jakieś dane - nazwa, cena. Po dodaniu wygląda to np tak:
    Nazwa Cena_Netto Cena_brutto
    Towar 1,00 1,22

    I teraz chcę zapisać te dane do bazy.

    O to przykład

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    W bazie SQL Nazwa=varchar, cena_netto=float, cena_brutto=float.


    A i jeszcze drugie pytanko, jeśli mam w jakimś labelu wartość 2,50 to czy mogę zapisać go do bazy do pola o type float, sposób label.Text ?

    0 7
  • Pomocny post
    #2 15 Mar 2014 14:08
    rufek90
    Poziom 24  

    Masz źle napisanego SQL. Insert into tabela..

    Zauważ, że puszczasz zapytanie do bazy. Całe zapytanie jest stringiem, więc nie ma problemu żeby zainsertować do bazy coś, co było w we właściwości Text. Nie trzeba tego w żaden sposób konwertować. Co najwyżej musisz pamiętać o tym, że w liczbach zmiennoprzecinkowych w zapytaniu mają być kropki, a nie przecinki.
    Błąd masz również w tym, że liczby w zapytaniu umieszczamy bez apostrofów, a stringi z apostrofami. Ty apostrofy dałeś wszędzie

    Zamiana przecinka na kropkę: label1.Text.Replace(",",".");

    Dobrym nawykiem jest stosowanie double zamiast float;

    0
  • #3 15 Mar 2014 15:32
    nerx2
    Poziom 11  

    Ok dzięki bardzo ;) Ale w SqlServer2013 przecież nie ma potrzeby dawania insert into, wystarczy sam insert. A z apostrofami to nie rozumiem gdzie mam błąd, wydaje mi się, że zawsze w takim formacie dodawałem i działało, jak powinno to być w takim razie?

    Kolejna sprawa, czyli jest datagrid.Rows[0].Cells["Cena_netto"].Value to już to powinno trafić do pola w bazie, który jest typu float, bez żadnego konwertowania?

    0
  • #4 15 Mar 2014 16:10
    cepelia
    Poziom 20  

    tak mi się wydaje, że pole w bazie powinno być

    Kod: sql
    Zaloguj się, aby zobaczyć kod


    poza tym używaj sqlParamerers...coś na zasadzie...

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    choć moim zdaniem wrzucanie ceny brutto do bazy jest delikatnie mówiąc bez sensu...

    0
  • #5 19 Mar 2014 22:56
    nerx2
    Poziom 11  

    cepelia napisał:

    poza tym używaj sqlParamerers...coś na zasadzie...


    Co mi to da? Bo z tego co widzę tylko więcej linijek kodu.
    Tak poza tym, miałem błąd w bazie danych w relacjach, moje zapytanie jest dobre. Z ceną brutto masz rację, mam na to już triggera, a to było tylko takie "testowe" zapytanie.

    0
  • Pomocny post
    #6 20 Mar 2014 09:58
    robin101
    Poziom 14  

    nerx2 napisał:
    cepelia napisał:

    poza tym używaj sqlParamerers...coś na zasadzie...


    Co mi to da? Bo z tego co widzę tylko więcej linijek kodu.
    Tak poza tym, miałem błąd w bazie danych w relacjach, moje zapytanie jest dobre. Z ceną brutto masz rację, mam na to już triggera, a to było tylko takie "testowe" zapytanie.


    To da, że kod będzie bardziej czytelny. Takie sklejanie stringów jak zrobiłeś jest trudniejsze do analizy. Poza tym stosując parametry zapytanie jest odporne na SQL Injection Link.

    0
  • Pomocny post
    #7 20 Mar 2014 11:58
    marcinj12
    Poziom 40  

    robin101 napisał:
    To da, że kod będzie bardziej czytelny. Takie sklejanie stringów jak zrobiłeś jest trudniejsze do analizy. Poza tym stosując parametry zapytanie jest odporne na SQL Injection Link.
    Plus: nie musisz się przejmować zapisem typów danych (czy w apostrofach, czy bez) i aplikacja będzie działać na różnych ustawieniach regionalnych - bo zamieniając przecinek na kropkę, to nie bardzo...
    Jest też wersja jednolinijkowa - AddWithValue

    0