2017-02-10 8 views
0

InsertInto SubとInsertInto Sub自体を呼び出すコード行がある。基本的なもの、問題なく動作するはずですが、そうではありません。これは、エラーがなくなり、コマンドを実行しますが、行は決してテーブルに追加されません。私はバルクインサートを持っています。これは以前にも多くの行のデータをテーブルに挿入していて、私はそれが動作していることを知っていて、それもやってみました。SQLite Insert Intoコマンドが動作しない - VB.NETでエラーが発生しない。

SQLiteがテーブルに行を挿入するために特別なものがありますか?私はSQLiteのドキュメントをチェックしており、INSERT INTOステートメントはサイトに表示されている通りです。私がそこで試してみると、insertがtempDTテーブル内でローカルに動作するので、これ以外に何ができるかわかりません。私は行を挿入した後にテーブルをロードしてドロップして新しいテーブルを作成することができますが、すべてを行う必要はありません。これはシンプルで基本的なコマンドなので、文字列の$の実装なしで誰かが普通に書き出すように言う前に、私はすでに "普通の"ものと帽子のhasnどちらもうまくいった。私もデータの変数を使用せず、値のためにハードコーディングされた文字列を1単語だけ使用していましたが、それもうまくいきませんでした。

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

MyDBの現在の値は何ですか?なぜmyFilePathは空白ですか。 –

+1

接続を開く必要はありませんか? – Bugs

+1

ha ....良い点のバグ............ –

答えて

0

私はあなたのGetConnectionString方法が実際に何をするかわかりませんが、それはあなたがSQLiteConnectionクラスのコンストラクタに渡す接続文字列を返す必要があります。

その後、次の動作するはず:

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 

あなたはこのようなクエリを実行することができるはずの接続を開いたら:

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

関数を呼び出すのではなく、挿入文字列で接続文字列を試してみます...それは私が同じ接続文字列関数を使用して(テーブルはそれを使用して細かくロードする)、一年前から一括して挿入していますので、これは問題であったなら間違いなく間違いでしょう。インサート... – MattE

0

は、私は、トランザクションを作成する必要がありますし、忘れました実際にDBに保存するためにSQLiteでトランザクションをコミットしてください...そうしないと、ローカルで変更が保持され、プログラムを閉じると消えます。

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

EDIT:これは動作しますが、私が見つけたは必要ありません...私はDBに存在した値を見た後に実現し、私はもう一度プログラムを実行した後、その後消えて、それがビンに書いていたということでした/ Debugディレクトリと、それを上書きしたプログラムを実行するたびに。だから私は今、適切なディレクトリにそれを指摘し、私の初期コードでは期待どおりに動作します。

関連する問題