2017-11-10 5 views
1

私はコードがありますが、それは常に私にとってはうまくいきません。場合によっては、データベースのロック、時には接続に関するエラーを返します。SQLiteCommandを使用して挿入クエリを作成する方法は?

これはコードです:

string sql = String.Format("insert into {0}({1}) values({2});", tableName, columns, values); 
SQLiteConnection myConn = null; 
try 
{ 
    myConn = new SQLiteConnection(dbConnection); 
    myConn.Open(); 

    using(SQLiteCommand sqCommand = new SQLiteCommand(sql)) 
    { 
     sqCommand.CommandText = sql; 
     int rows = sqCommand.ExecuteNonQuery(); 
     return !(rows == 0); 
    } 
} 
finally 
{ 
    myConn.Close(); 
} 

私が間違って何?

エラーは次のとおりです。ラインで

No connection associated with this command

в System.Data.SQLite.SQLiteCommand.InitializeForReader() 
    в System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior 

behavior) в System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior) в System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()

int rows = sqCommand.ExecuteNonQuery(); 
+1

は個人的に私は 'catch'であるためにあなたのコードの' finally'セクションを変更するだろうし、あなたが 'myConn.Closeを呼び出す必要はありません(){} 'を使用すると、コードブロックを使用しているときにそのオブジェクトを自動的に破棄します。また、Sqliteのロックについてのこの投稿についてはhttps://stackoverflow.com/questions/1800174/how-do-i-stop-theを参照してください。 -the-database-file-is-locked-exception – MethodMan

+1

さて、試してみてくださいが、それは理由だとは思わない。私は今エラーを投稿します – OPV

+0

あなたのエラーは、現在のコードとは何の関係もないようです。あなたはそのInsert文で 'ExecuteReader'を呼び出していません。また、sqlcommand.Commit()を実行して、 'ExecuteReader'を呼び出す場所を見つけてください。 – MethodMan

答えて

2

あなたはCommandConnectionassignするのを忘れ:

No connection associated with this command

using(SQLiteCommand sqCommand = new SQLiteCommand(sql)) 

番目必要があります私たちはなる: ``あなたが使用しての内部で現在)(

using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn)) 
+0

それでも私はこの操作を実行すると "データベースがロックされています"というエラーが表示されます。 – OPV

+0

行 'int rows = sqCommand.ExecuteNonQuery(); ' – OPV

+0

私はマークしますが、それは問題の一部です。 – OPV

関連する問題