2017-02-10 4 views
0

Hier ist die Codezeile, die den InsertInto Sub und den InsertInto Sub selbst aufruft. Grundlegende Sachen, sollte ohne Probleme funktionieren, aber es tut es nicht. Es geht durch, keine Fehler und führt den Befehl aus, aber die Zeile wird nie zur Tabelle hinzugefügt. Ich habe auch einen Bulk-Insert, den ich geschrieben habe, der viele Zeilen von Daten zuvor in Tabellen eingefügt hat, die ich weiß funktioniert und habe das auch versucht und immer noch kein Glück.SQLite Einfügen in Befehl funktioniert nicht --- kein Fehler in VB.NET

Gibt es etwas Spezielles, das SQLite benötigt, um Zeilen in eine Tabelle einzufügen? Ich habe die SQLite-Dokumentation überprüft und die INSERT INTO-Anweisung ist genau so, wie sie auf ihrer Site angezeigt wurde. Ich bin mir nicht sicher, was ich sonst noch tun soll, da das Insert lokal in einer tempDT-Tabelle arbeitet, wenn ich es dort versuche. Ich meine, ich könnte die Tabelle laden, sie löschen und dann eine neue Tabelle erstellen, nachdem ich die Zeile eingefügt habe, aber das sollte ich nicht tun müssen. Dies ist ein einfacher, grundlegender Befehl und es sollte funktionieren ... und bevor jemand sagt, es normalerweise ohne die $ Implementierung der Zeichenkette auszugeben, habe ich das schon gemacht, indem ich verschiedene Methoden einschließlich des "normalen" und Hut hasn versucht habe Es hat auch nicht funktioniert. Ich habe auch keine Variablen für Daten verwendet und nur ein Wort hartcodierte Strings für Werte verwendet und das hat auch nicht funktioniert.

SQLTables.InsertInto(MyDB, "SaveGames", $"INSERT INTO SaveGames(FileName,SaveGameJSONString) VALUES ('{fileName}', '{model}')") 


Public Sub InsertInto(dbName As String, tableName As String, SQLCmd As String, Optional ByVal myFilePath As String = "") 
     Dim Conn As New SQLiteConnection() 
     GetConnectionString(dbName, Conn, myFilePath) 
     Using Conn 
      Dim SQL As String = SQLCmd 
      Dim Cmd As New SQLiteCommand(SQL, Conn) 
      Cmd.ExecuteNonQuery() 
     End Using 
    End Sub 
+0

Was ist der aktuelle Wert von MyDB und warum ist myFilePath leer? –

+1

Müssen Sie die Verbindung nicht öffnen? – Bugs

+1

ha .... gute Punkt Bugs ............ –

Antwort

0

Ich weiß nicht, was Ihre GetConnectionString Methode tatsächlich funktioniert, aber es sollte eine Verbindungszeichenfolge, die Sie an den Konstruktor der SQLiteConnection Klasse übergeben zurück.

Dann sollten folgende Arbeiten:

Public Sub InsertInto(dbName As String, tableName As String, SQLCmd As String, Optional ByVal myFilePath As String = "") 
    Dim Conn As New SQLiteConnection(GetConnectionString(dbName, myFilePath)) 
    Conn.Open() 
    Dim Cmd As New SQLiteCommand(Sql, Conn) 
    Cmd.ExecuteNonQuery() 
    Conn.Close() 
End Sub 

Nachdem Sie die Verbindung geöffnet haben, sollten Sie in der Lage sein, die Abfrage wie folgt auszuführen:

Dim Cmd As New SQLiteCommand(SQLCmd, Conn) 
Cmd.ExecuteNonQuery() 
+0

Ich werde versuchen, die Verbindungszeichenfolge in der Einfügung zu tun, anstatt die Funktion aufzurufen ...das wäre definitiv seltsam, wenn das das Problem wäre, da ich die gleiche Verbindungszeichenfolgefunktion zum Laden verwendet habe (die Tabelle lädt sie gut), erstelle und mache seit einem Jahr Masseneinfügungen dafür, habe nie versucht, eine einzige zu tun einfügen... – MattE

0

vergessen ich eine Transaktion erstellen und dann Übernehmen Sie die Transaktion in SQLite, damit sie tatsächlich in der Datenbank gespeichert wird ... andernfalls werden die Änderungen nur lokal gespeichert und verschwinden, wenn Sie das Programm schließen ... und jetzt wie erwartet funktionieren.

Using **transaction = Conn.BeginTransaction()** 
      Dim Cmd As New SQLiteCommand(SQLCmd, Conn) 
      Cmd.ExecuteNonQuery() 
      **transaction.Commit()** 
      Conn.Close() 
     End Using 

EDIT: Dies funktioniert, aber ich fand heraus, nicht benötigt ... Ich erkannte, nachdem der Wert dort in der DB zu sehen, und dann einmal weg lief ich wieder das Programm war, dass es in das bin schrieb/Debug-Verzeichnis und jedes Mal, wenn ich das Programm lief, überschrieb es es. Also habe ich es jetzt auf das richtige Verzeichnis gerichtet und es funktioniert wie erwartet mit meinem ursprünglichen Code.

Verwandte Themen