我有一个与 Sql Server 配合良好的应用程序。我有一个 DevExpress 网格,它仅显示轮播模式下的一条记录(我希望这并不重要)。
现在,我已将代码更改为与数据库无关,并且正在测试 MySql。当用户修改记录并接受更改时,我收到以下错误:
Concurrency violation: the UpdateCommand affected 0 of the expected 1 records
经过一番研究,我得出的结论是问题出在 DATETIME 字段上。我正在使用“允许零日期时间=False;转换零日期时间=True;”在我的 MySql 连接字符串中,以便我可以将默认 DATETIME 值转换为 .Net DateTime 对象。自动生成的 UpdateCommand 包含 where 子句中的每个字段,我猜当 MySql DATETIME 设置为默认值时比较会失败,因为删除 DATETIME 字段问题就消失了。
我有一个主键列,并且不允许用户修改它,那么发出自定义 UpdateCommand 以使 WHERE 子句中只有一个字段的正确方法是什么?
我当前接受更改的代码:
Dim builder As DbCommandBuilder = m_Conn.CreateCommandBuilder(m_Adapter)
m_Adapter.Update(m_DataTable)
CreateCommandBuilder 是 IDbConnection 上的扩展方法,用于使用 DbCommandBuilder 接口(interface)的正确实现来创建正确的对象。
最佳答案
您的 DBCommandBuilder 应该有 ConflictOption需要设置的属性。 大概您想将其设置为 ConflictOption.OverwriteChanges。
我不确定当您通过 CommandBuilder 构造函数初始化适配器命令时它是否有效,但是
var builder = new MySqlCommandBuilder();
builder.ConflictOption = ConflictOption.OverwriteChanges;
builder.DataAdapter = m_Adapter;
应该做。
关于c# - 忽略 MySqlDataAdapter.Update(DataTable) 中的 DATETIME 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269588/