c# – MySql语句准备“不粘”
我试图使用一个准备好的语句,而
MySqlCommand执行得很好,执行时间是糟糕的.我把它的cmd.IsPrepared的结果写入控制台,确实是错误的.这里是我设置MySqlCommand的地方:
MySqlCommand cmd = con.CreateCommand(); cmd.CommandText = @"INSERT INTO dict (pre,dist,dict.char,score) VALUES(@pre,@dist,@char,@score) ON DUPLICATE KEY UPDATE score = score + @score"; cmd.Parameters.Add("@pre",MySqlDbType.VarChar,32); cmd.Parameters.Add("@dist",MySqlDbType.Int32); cmd.Parameters.Add("@char",1); cmd.Parameters.Add("@score",MySqlDbType.Double); cmd.Prepare(); 在添加具有相同结果的参数之前,我也尝试执行Prepare(). 然后我有一个循环的代码,做一些计算和设置变量,如下所示: cmd.Parameters[3].Value = score; …并没有任何其他的命令,直到它运行时间: Console.WriteLine(cmd.IsPrepared); cmd.ExecuteNonQuery(); 控制台的结果总是错误的.这一切都是在一个基本的交易中完成的,但这似乎不应该使事情变得困扰.在我设置MySqlCommand之前,我打开事务. 任何想法,这是怎么回事? 编辑:我在java中复制了代码,并且准备好的语句工作正常.所以这不是我的数据库服务器本身的问题,它在.net中是一个特别的问题.当然,每个人都不会破坏.net /连接器,那么这可能是什么呢? 它绝对没有准备好,根本没有设置bool值,在.net中运行的时间在某些测试输入是如此之长我没有耐心等待它,但在java中相同的输入运行在?3分钟.两者使用基本相同的代码. 这是一个简单的测试,我在.net中,所以你可以看到我正在尝试的完整代码(我从连接字符串中删除了UID和密码,但在正常的代码,他们在那里,建立一个连接,该语句将数据输入数据库): using (MySqlConnection con = new MySqlConnection(@"SERVER=localhost;DATABASE=rb;UID=;PASSWORD=;")) { con.Open(); using (MySqlCommand cmd = con.CreateCommand()) { cmd.CommandText = @"INSERT INTO test (test.test) VALUES(?asdf)"; cmd.Prepare(); //doesn't work cmd.Parameters.AddWithValue("?asdf",1); cmd.ExecuteNonQuery(); } } 我在C#2010中使用MySql.Data.dll版本6.4.4.0和v4.0.30319的运行时版本.我还包括上述示例代码的MySql.Data.MySqlClient. 解决方法
看起来你正在使用MySqlCommand对象,至少在第二个例子中.为了获得准备好的语句的好处,您不需要处理连接和命令对象.在设置CommandText之后还要设置任何参数之前,您还需要调用prepare.
https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html MySQL中的准备语句参数也没有命名,它们是根据顺序指定的. CommandText应该只包含参数所在的问号,并且需要按照该顺序添加参数对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |