【发布时间】:2013-03-29 01:03:03
【问题描述】:
问题是:无论我做什么,我都无法让 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 格式的变量,但这也不起作用。我也试过在测试中一次只调用一个 cmd.Prepare() 方法。
【问题讨论】: