我遇到一个问题,即使经过数小时的调试,我也无法找到解决方案。
我有一个简单的SQL命令,我希望更新一个具有某个值的行(值为约5mb的文本),执行SQL命令后,C#代码端的'ExecuteNonQuery()'返回'1'并且没有例外,但有时会在数据库行中反映更改,有时则不会。
我尝试调试以查看将替换旧值的值是否正确并且它们是正确的。我正在使用MySQL 5.5.11。
对这个问题不以为然,如果您有任何想法,我将不胜感激。
编辑,包括代码:
代码就像这样简单:
cmd.CommandText = "UPDATE user SET data = @data WHERE id = @id";
然后我将params添加到SQL Query的DBCommand对象中。 “数据”大约约5亿。
这个命令总是返回'1',即使这些更改没有反映在数据库中(某些时候它可以工作,有时它不会):
cmd.ExecuteNonQuery();
提前致谢!
答案 0 :(得分:1)
我不知道mysql提供程序是否使用autocommit?如果没有,那么你必须在连接对象上使用BeginTransaction获取Transaction对象上的commit。
答案 1 :(得分:0)
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx
SQL Server的Microsoft .NET Framework数据提供程序不支持问号(?)占位符,用于将参数传递给SQL语句或由CommandType.Text
命令调用的存储过程。在这种情况下,必须使用命名参数。
例如:
SELECT * FROM Customers WHERE CustomerID = @CustomerID
修改强> 刚注意到这是MySQL,虽然我找不到任何关于它的快速,但我建议你使用命名参数
答案 2 :(得分:0)
我有这个问题,它与自动提交有关。
问题:应用程序生命周期早期的自动提交由应用程序中的另一个进程设置为0,但都失败了。然后,连接池将重新使用与自动提交关闭的连接。
这将在不可预测的时间导致此类错误。