Adatkonvertálás VS2005 és MSSQL2005 használatánál

Adatkonvertálás VS2005 és MSSQL2005 használatánál
2006-09-05T10:00:09+02:00
2006-09-07T15:37:07+02:00
2022-11-01T10:15:43+01:00
LaciSzd
Van egy MaskedTextBox mezőm a formon, amelybe ezres tagolással kérem be az értéket. Az sql táblában egy decimal típusú oszlop, amelybe ezt az értéket szeretném eltárolni. Viszont, amikor el akarom tárolni, rendszeresen hibaüzenetet kapok.
"Error converting data type varchar to numeric." Próbáltam a convert függvényt, azzal sem jutottam előre. Hogyan tudom átadni ezt az értéket, milyen átalakítást hajtsak végre? Lehet, hogy a tagolás sem jó neki.
Mutasd a teljes hozzászólást!
Riha:
Szerintem a CType is el fog hasalni az ezres elválasztón. Talán ha teszünk elé egy replace(" ","")-t akkor működik.
Ráadásul átalakítani integerré, hogy utána stringként használd? (VB automatikusan visszaalakítja, de akkor is csúnya)

LaciSzd:
'Deklaráció (1x kell megtenni a progi indulásakor / form betöltésekor, stb): Dim cmd As New SQLCommand("INSERT INTO Tabla (mezo1, mezo2) VALUES (@mezo1, @mezo2)", myConnection) cmd.Parameters.Add("@mezo1", SQLDBType.Varchar, 200) cmd.Parameters.Add("@mezo2", SQLDBType.Int) 'Használata: cmd.Parameters("@mezo1").Value = Text1.Text cmd.Parameters("@mezo2").Value = CInt(Text2.Text) cmd.Execute(NonQuery)

Egyébként miért nem a tableadapter eredeti updatecommandját használod?
(amit a wizzard generált)
Mutasd a teljes hozzászólást!

  • Szia!

    Most hirtelen az jutott eszembe, hogy a maskeditnél talán meg lehet adni, hogy maszkkal együtt adja vissza az értékét, vagy talán van egy olyan tulajdonsága, metúdusa, ami maszk nélkül (azaz jelen esetben ezres bontás nélkül) adja vissza értékét.

    A convert azért nem tudja átalakítani számmá az ezres bontású szöveget, mert szóközök, vagy pontok vannak benne, a convert pedig legfeljebb egy tizedesjelet fogad el.

    üdv
    ex rem ember
    Mutasd a teljes hozzászólást!
  • Szia!

    Programozás terén annyira nem ismerem a MS megoldásokat, de próbálok segíteni
    A gond az, hogy a eltér az oszlopnak megadott és az általad beszúrni próbált adat típusa. Így látatlanban elég nehéz tippet adni, de szerintem működne, ha az adatbázisba való beszúrás előtt a programodon belül konvertálnád át int adattípusra és azt az értéket próbálnád beszúrni. Gondolj arra, hogy a sztringből távolítsd el az esetleges tagoló szóközöket, vagy pontokat.
    Mutasd a teljes hozzászólást!
  • Ezért talán nem is érdemes maszkedTextBox-ot használnod, mert egy sima textbox-nak a tulajdonságokban (az Advanced -nél) is beállítható mindez (pl. numeric, stb.) s nem kell konvertálni sem.
    Mutasd a teljes hozzászólást!
  • Valamit biztosan nem jól csinálok, mert így is ugyanazt a hibaüzenetet kapom.
    Mutasd a teljes hozzászólást!
  • Jó lenne tudni, mit is csinálsz!
    Viszont, amikor el akarom tárolni, rendszeresen hibaüzenetet kapok.

    Mutass kódrészletet, ahol a hiba jelentkezik!
    Mutasd a teljes hozzászólást!
  • this.sqlDataAdapter1.InsertCommand = new System.Data.SqlClient.SqlCommand(
    "INSERT INTO Cikktorzs (cikkszamID,cikknev1,cikknev2,cikknev3,cme,csztj,cmeret,cfsz,cmegsz,celadar1)" +
    " VALUES ('" +
    cikkszamID.Text + "','" +
    cikknev1.Text + "','" +
    cikknev2.Text + "','" +
    cikknev3.Text + "','" +
    cme.Text + "','" +
    csztj.Text + "','" +
    cmeret.Text + "','" +
    cfsz.Text + "','" +
    cmegsz.Text + "','" +
    celadar1.Text +"')", sqlConnection1);


    a celadar1-nél van a gond. ha az nincs, a többit simán elrakja, mert nem numerikus.
    Mutasd a teljes hozzászólást!
  • Pont itt a baj!
    a celadar1.text -et konvertáld át integer-ré (Ctype)!
    Mutasd a teljes hozzászólást!
  • 1.) Használj paraméteres command objectet (sokkal szebb és biztonságosabb)
    2.) Ha már magad rakod össze a query-t akkor felesleges ebbe a dataadaptert belekeverned, csak problémát fog okozni
    3.) Numerikus mezőnél nem kell aposztróf.
    Mutasd a teljes hozzászólást!
  • A numerikusnál kivettem az aposztrófot, nem tudom, miért raktam oda.
    Az 1-2. válaszodra egy rövid példát tudnál írni?
    Az advencednél van valami különleges beállítási mód, amit meg kell tennem esetleg akár a textboxnál, akár a maskednél?
    Mutasd a teljes hozzászólást!
  • cfsz.Text + "','" +
    cmegsz.Text + "','" +
    celadar1.Text +"')", sqlConnection1);
    helyett pl.

    cfsz.Text + "','" +
    cmegsz.Text + "'," +
    celadar1.Text +")", sqlConnection1);

    vagy

    cfsz.Text + "','" +
    cmegsz.Text + "'," +
    ctype(celadar1.Text,integer) +")", sqlConnection1);

    Mutasd a teljes hozzászólást!
  • Riha:
    Szerintem a CType is el fog hasalni az ezres elválasztón. Talán ha teszünk elé egy replace(" ","")-t akkor működik.
    Ráadásul átalakítani integerré, hogy utána stringként használd? (VB automatikusan visszaalakítja, de akkor is csúnya)

    LaciSzd:
    'Deklaráció (1x kell megtenni a progi indulásakor / form betöltésekor, stb): Dim cmd As New SQLCommand("INSERT INTO Tabla (mezo1, mezo2) VALUES (@mezo1, @mezo2)", myConnection) cmd.Parameters.Add("@mezo1", SQLDBType.Varchar, 200) cmd.Parameters.Add("@mezo2", SQLDBType.Int) 'Használata: cmd.Parameters("@mezo1").Value = Text1.Text cmd.Parameters("@mezo2").Value = CInt(Text2.Text) cmd.Execute(NonQuery)

    Egyébként miért nem a tableadapter eredeti updatecommandját használod?
    (amit a wizzard generált)
    Mutasd a teljes hozzászólást!
  • a ctype elhasalt.
    Megfogadtam a tanácsot, és a paraméterest használom ezután. Belenéztem az insertcommandba, fejl.progi generálta a paraméteres dolgokat, ez így nagyon jó, nem kell külön gépelgetni. Viszont a paraméteres beállításoknál (sqldataadapter/insertcommand/sqlParameters SQLDbType=decimal a celadar1 (ami nem akar működni), továbbra is hibás, azt írja, hogy nem sikerült decimálisra konvertálni a string típusút. Lassan kezdem feladni az ezres tagolást. Ha nincs ezres tagolás, akkor csak az egész részét teszi el, a tizedest nem.
    Mutasd a teljes hozzászólást!
  • Az a decimal milyen típust takar?
    Lehet, hogy ott a hiba (pl. integer-nél nem vihetsz be tizedest).
    Nézd meg Management Studio-val, direktben megy-e a bevitel!
    Mutasd a teljes hozzászólást!
  • az sql táblában adtam meg a decimal típust 18,2 paraméterekkel. esetleg a datasetnél nem jó valami?
    Mutasd a teljes hozzászólást!
  • Hogy néz kia Mask property?
    (Mi a string, amiből decimal-t kellene csinálnod?)
    Mutasd a teljes hozzászólást!
  • databindings/advanced/binding=dataview1-celadar1
    ugyanitt: datasource update mode=Never (másik kettővel is próbáltam már), formázás típusa:numeric, decimal places=2

    databindingd/text=dataview1 - celadar1
    a propertiben a textnél üres, de szerintem ennek nincs jelentősége. Ird meg, mely adatok kellenek még.
    Mutasd a teljes hozzászólást!
  • Nagyon köszönöm a példát, ezzel nagyot segítettél, sikerült megoldanom. A convert.decimal() függvénnyel sikerült eltárolni a táblában és az ezres tagolást is ez lerendezte. Mégegyszer köszönöm.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd