kostenloser Webspace werbefrei: lima-city


SQLite Query Exception (weil negativer Integer)

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. schneewitttchen

    schneewitttchen hat kostenlosen Webspace.

    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
  4. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    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.
  5. 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).
  6. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    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
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!