SQLite Query Exception (weil negativer Integer)
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
abfrage
aufgefallen
bedeutung
code
datenbank
eigentliche problem
einziges kommando
erfolgreich abfragen
flag
journal
komplette code
laufen
paste
problem
seltsames problem
spalten
string
verweis
vorhandensein
vorzeichen
-
Guten Abend,
habe da ein seltsames Problem.
Ich verwende eine SQLite Datenbank über C#, um Datensätze zu speichern.
Probleme bereitet mir jetzt folgende Query:
INSERT INTO `assetList` (itemID, locationID, typeID, quantity, flag, singleton, rawQuantity) VALUES ('" + itemID + "', '" + locationID + "', '" + typeID + "', '" + quantity + "', '" + flag + "', '" + singleton + "', '" + rawQuantity + "');
Alle Spalten sind Integer.
Die Spalte "rawQuantity" enthält unter anderem auch negative Werte.
So kann eine mögliche Query z. B. so aussehen:
INSERT INTO `assetList` (itemID, locationID, typeID, quantity, flag, singleton, rawQuantity) VALUES ('12345678', '1234', '5678', '100', '5', '1', '-1');
Versuche ich nun, diese Query per C# zu senden, erhalte ich eine Exception wegen einem Null-Verweis.
Lasse ich die selbe Abfrage hingegen direkt in der Datenbank laufen, ist sie erfolgreich.
Abfragen ohne negative Werte funktionieren hingegen auch über C#.
Der komplette Code wäre:
SQLiteConnection connection = new SQLiteConnection(); connection.ConnectionString = "Data Source=" + database_main_path + characterID + ".db;Count Changes=off;Journal Mode=off;Pooling=true;Cache Size=10000;Page Size=4096;Synchronous=off;"; connection.Open(); SQLiteTransaction transaction = connection.BeginTransaction(); SQLiteCommand command = new SQLiteCommand(connection); command.CommandText = "INSERT INTO `assetList` (itemID, locationID, typeID, quantity, flag, singleton, rawQuantity) VALUES ('" + itemID + "', '" + locationID + "', '" + typeID + "', '" + quantity + "', '" + flag + "', '" + singleton + "', '" + rawQuantity + "');"; command.ExecuteNonQuery(); command.Dispose(); transaction.Commit(); connection.Close(); connection.Dispose();
Ich weiß nicht, warum C# mir eine Exception liefert, obwohl die Query funktioniert, wenn ich sie per Copy&Paste direkt in die Datenbank kopiere.
Jemand eine Idee?
Beitrag zuletzt geändert: 30.4.2012 22:31:07 von adelwoehrer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich programmier zwar nicht mit C#, denke aber dass es an deinen Hochkommats liegt. versuch es einfachm einmal ohne:
INSERT INTO `assetList` (itemID, locationID, typeID, quantity, flag, singleton, rawQuantity) VALUES (" + itemID + ", " + locationID + ", " + typeID + ", " + quantity + ", " + flag + ", " + singleton + ", " + rawQuantity + ");"
Edit: gerade ist mir noch aufgefallen, dass der letzte String ");" nicht abgeschlossen war. Dies könnte auch das eigentliche Problem gewesen sein.
Beitrag zuletzt geändert: 1.5.2012 20:27:22 von schneewitttchen -
Ist doch alles abgeschlossen?
Sonst würde er mich nichtmal kompilieren lassen.
Tut mir leid, aber ohne Anführungszeichen funktioniert kein einziges Kommando.
Es klappt ja so lange, bis ein negativer Wert eingefügt werden soll....am Aufbau des Strings sollte es also nicht liegen. -
Sind die Werte denn von Bedeutung wenn sie negativ sind ?
2 Workarrounds:
Speichere das als Strings und wandle es entsprechend um wenn du damit arbeiten musst oder speichere das Vorzeichen separat und konvertiere entsprechend bei vorhandensein mit (-1). -
Die Variablen sind bereits strings.
EDIT:
Offenbar hat es an der DLL für SQLite gelegen.
Ich habe am Code nichts geändert und einfach mal die aktuelle Version der DLL runtergeladen, und siehe da, es funktioniert.
Was an der alten aber plötzlich Fehler verursacht, versteh ich nicht....meine anderen Programme laufen auch noch alle gut damit.
Problem also gelöst, auch wenn ich nicht weiß wie. =)
Danke für die Lösungsvorschläge.
Beitrag zuletzt geändert: 2.5.2012 19:31:03 von adelwoehrer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage