ここに問題があります。私が何をしているように見えても、MySqlCommand を実際に準備することはできません。http://dev.mysql.com/doc/refman/5.6/en/connector-net-programming-prepared.htmlからサンプル コードをコピーして貼り付けてみましたが、実際には機能しません。 .
私は解決策を見つけるためにGoogleを探しましたが、出てきた最も近いものは、実際には質問に答えなかったMySql statement prepare "not sticking"でした。
このテスト用のテーブル設定は次のとおりです。
CREATE TABLE `test`.`test_prepared_query` (
`id` INT NOT NULL ,
`value` INT NOT NULL ,
PRIMARY KEY (`id`) );
C# でのテスト コード
public void TestPrepareQuery()
{
connString = new MySqlConnectionStringBuilder();
connString.Server = "localhost";
connString.Database = "test";
connString.UserID = "someuserid";
connString.Password = "somepassword";
bool isprepared;
using (MySqlConnection conn = new MySqlConnection(connString.ToString()))
{
MySqlCommand cmd = new MySqlCommand(
"INSERT INTO test_prepared_query VALUES (@id, @value)", conn);
cmd.Connection.Open();
cmd.Prepare();
isprepared = cmd.IsPrepared; // isprepared is false here
cmd.Parameters.AddWithValue("@id", 0);
cmd.Parameters.AddWithValue("@value", 0);
cmd.Prepare();
isprepared = cmd.IsPrepared; // isprepared is still false
// this is 1 -- the query succeeds
int rowsAffected = cmd.ExecuteNonQuery();
for (int i = 1; i < 10; i++)
{
cmd.Parameters["@id"].Value = i;
cmd.Parameters["@value"].Value = i;
// this is 1 -- the query succeeds
rowsAffected = cmd.ExecuteNonQuery();
}
}
}
コードを実行すると、テーブルに行が正常に配置されますが、プログラムをステップ実行すると、cmd.IsPrepared の状態が常に false であることが確認されます。なぜこれが起こっているのか誰にも分かりますか?このソース コードは、テーブル名と実際の接続文字列が変更されているだけで、サンプル コードと基本的に同じです。
編集: ?name 形式の変数を試しましたが、どちらも機能しません。また、テストで一度に 1 つの cmd.Prepare() メソッドのみを呼び出すようにしました。