Hallo.
Ich habe folgendes Problem vielleicht hat jemand eine gute Idee.
code:
double f = Convert.ToDouble(data[s][z]); //string[][] data, string Werte werden in double konvertiert
string sql = "INSERT INTO Messwert(Messwertwert) VALUES ('" + f + "')"; //in datenbank einfügen, fehlermeldung
SqlCommand meinCommand = new SqlCommand(sql, meineConnection);
meineConnection.Open();
meinCommand.ExecuteNonQuery();
meineConnection.Close();
1.Ich habe eine Tabele Messwert, mir einer Spalte Messwertwert die den Datentyp "float" hat.
Da der SQLServer den Datentyp "double" nicht kennt, habe ich hier http://msdn2.microsoft.com/de-de/library/ms378715.aspx
gelesen das man float benutzten kann, deshalb habe ich die Tabellespalte auch als float definiert.
wenn ich jetzt Werte einfügen möchte dann kommt die Fehlermeldung "Fehler beim Konvertieren des varchar-Datentyps in float."
Es wird nur der erste Wert (0) in die Spalte eingefügt.Hat jemand eine Idee woran das liegen könnte?
Gruß
niko8380
Hallo,
ich vermute Folgendes: Dein DbCommand übergibt einen String sql, der von der Datenbank aufgelöst werden muss. Dabei konvertiert NET die double-Variable mit f.ToString() automatisch, und die DB muss das wieder interpretieren.
Deshalb gilt die grundsätzliche Empfehlung, dass DbCommands mit Parametern erstellt werden sollen, siehe Beispiel unter :rtfm: SqlParameterCollection.Add-Methode (String, SqlDbType, Int32) und andere Überladungen.
Gruß Jürgen
Und man fragt sich ebenfalls, warum du einen String in einen float in einen String baust.. Der String enthaelt doch anscheinend die richtige Genauigkeit und einen exakten Wert. Wenn du das jetzt nicht zum rechnen brauchst, warum willst du das nicht so belassen?
Pound for pound, plutonium is about as toxic as caffeine when eaten.
hallo
Ich möchte mit den Zahlen später arbeiten, z.b. Visualisieren, deshalb brauche ich sie in double oder ein ähnlichem datentyp.
Ich schaue mir die SqlParameterCollection an, scheint interessant zu sein
Danke
Gruß
niko8380
string sql = "INSERT INTO Messwert(Messwertwert) VALUES (**:::
Hallo niko8380,
du könntest auch einfach die einfachen Hochkommas in deinem SQL-String weglassen.
Du mußt dabei aber auf die Tausendertrennung achten (Punkt -> Komma!)
Gruß
Jürgen
Hi primel,
wenn ich die Hochkommas weglasse kommt dann folgende Fehlermeldung:
"In der INSERT-Anweisung sind weniger Spalten angegeben als Werte in der VALUES-Klausel."
Der Ansatz von juetho scheint logisch zu sein. Ich habe mir die "SqlParameterCollection.Add-Methode (String, SqlDbType, Int32)" aber so richtig schlau bin ich daraus noch nicht geworden. Wer ein Beispiel hat, immer her damit.
Gruß
niko8380
Und mit **Parametern **gibt es solche Probleme nicht: einfache oder doppelte Hochkommata, Konvertierungen hin und zurück, unpassende Formatierungen usw. Also:
Original von niko8380
Ich schaue mir die SqlParameterCollection an, scheint interessant zu sein
Genau das, und jeder andere Versuch und jede andere Diskussion führt (in diesem Zusammenhang) nur zu anderen Krücken! Jürgen
Hi niko8380,
hast du mehrere Spalten in deiner DB?
Hast du die Werte, die du reinschreiben willst (f) überprüft, ob da die Dezimaltrennzeichen stimmen (Datenbanken speichern meist in amerikanischer Dezimaltrennung, also Punkt statt Komma).
Kommt da ein Komma, meint die DB-Engine beim speichern, du hast mehrere Felder im Values-Bereich und hat damit recht mit ihrer Fehlermeldung.
Wenn`s das nicht ist, kann ich dir leider nicht mehr weiterhelfen.
Gruß
primel
P.S. Hab mir gerade ein Beispiel-SQL gebastelt und da funktionierts!
@juetho
Ich geb dir mit den SQL-Parametern natürlich Recht, es funktioniert aber in "reinem" SQL auch.
Gruß
primel
Original von primel
@juethoIch geb dir mit den SQL-Parametern natürlich Recht, es funktioniert aber in "reinem" SQL auch.
Gruß
primel
Natürlich, aber eben nur dann, wenn alle Rahmenbedingungen (die Du ja auch nennst) exakt stimmen. Wenn auch nur eine davon nicht passt, dann knallt es; und viele Leute suchen nach den Fehlern. Jürgen
Hallo.
@Primel
wahscheinlich hast du recht.
Die Tabelle in der ich einfügen möchte hat mehrere Spalten.
Wenn ich die Werte die ich einfügen,zum Testen, verändere d.h. das Komma durch einen Punkt ersetze, dann klappt das einfügen ohne Hochkommas. Dabei wird aber anstatt von "0.01040" der Wert "1040" gespeichert.
Ich weiß aber nicht was ich machen soll, das Komma durch einen Punkt ersetzen, aber dann werden die Stellen vor dem Komma(wenn 0) wegelassen
und sieht so aus:
0.01040 --->1040
2.815-->2815
@juetho
Hast du vielleicht ein Beispiel oder weißt du wo ich eins finden um das mit SqlParameterCollection umzusetzten?
Gruß
Niko
Original von niko8380
Hast du vielleicht ein Beispiel oder weißt du wo ich eins finden um das mit SqlParameterCollection umzusetzten?
Ein Beispiel (hier für Update) findest Du unter anderem im Openbook C# im Abschnitt 26.7.3 Aktualisieren mit »ExecuteNonQuery« unter Bereitstellung der Command-Objekte, außerdem (allerdings sehr kurz) in meinem obigen Hinweis auf :rtfm:
Jürgen
PS. Ich bin sonst nicht so hart, dass ich ein bestimmtes Verfahren als das einzig richtige bevorzuge. Aber dieses Beispiel mit der Konvertierung spezieller Zahlen ist so eklatant, dass ich mich unbedingt festlegen wollte.