Laden...

Eine float Variable mit Nachkommastellen in eine Accessdatenbank schreiben

Erstellt von Dumpfbacke vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.189 Views
D
Dumpfbacke Themenstarter:in
11 Beiträge seit 2016
vor 4 Jahren
Eine float Variable mit Nachkommastellen in eine Accessdatenbank schreiben

verwendetes Datenbanksystem: <ACCESS>

Hallo,

ich will eine float Variable über eine OleDbConnection in eine Accesdatenbankschreiben.
in Access ist das Feld als "_NUMBER _/ Field Size _Double _/ Decimal Places Auto deklariert.
Nun funktioniert das ganze nur wenn ich eine Zahl ohne Kommastelle schreibe, sobad die Zahl eine Kommastelle hat nicht mehr:> Fehlermeldung:

{"Number of query values and destination fields are not the same."}

Das heisst z.b 798 wird in die datenbank geschrieben 798.5 nicht mehr.
In Access selber kann ich sehrwohl Zahlen mit Kommastellen einfügen.

Was mach ich falsch?

Danke, mfg Dumpfbacke

T
2.219 Beiträge seit 2008
vor 4 Jahren

Sieht so aus als würdest du mehr Werte oder Spalten beim Insert Into angeben als es Spalten oder Werte gibt.
Z.B. gibst du beim Insert 3 Spalten an aber bei Values nur 2 Werte.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

D
Dumpfbacke Themenstarter:in
11 Beiträge seit 2016
vor 4 Jahren

das sieht bei mir so uas:

float _zahl = 78.5f;
            _cmd.CommandText = "INSERT INTO Table1(zeitstempel,zeitstempelString,var1)  VALUES('" + DateTime.Now + "','" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.fff") + "'," + _zahl + ")";

Accessdeklaration bitte siehe anhang

M
184 Beiträge seit 2012
vor 4 Jahren

Du schreibst die Werte ja direkt in deinen SQL-CommandText.
Du musst dafür aber Parameter benutzen, die du statt der Werte in den CommandText schreibst - und anschließend entsprechend im Code füllst.

Dazu gibt es unzählige Tutorials, bitte einfach mal danach googeln.

T
2.219 Beiträge seit 2008
vor 4 Jahren

Und genau durch die fehlenden Parameter entsteht der Fehler.
In DE wird das , als Dezimaltrennzeichen verwendet, was beim SQL dann als Trenner zwischen den Werten betrachtet wird und deshalb dann der Fehler entsteht.
Durch Sql Parameter werden genau solche Probleme sowie SQL Injections gelöst.
Niemals Werte direkt in den SQL String schreiben lassen.

Ebenfalls wenn möglich auf Access als DB verzichten.
Access hat im .NET Bereich nichts verloren.
Für lokale Anwendungsdatenbanken gibt es bessere Alternativen wie Sqlite oder andere Embedded Datenbanken.
Wenn du dies aber nicht ändern darfst, dann musst du damit wohl leider leben.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.