c# - 忽略 MySqlDataAdapter.Update(DataTable) 中的 DATETIME 字段?

标签 c# mysql datatable

我有一个与 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/

相关文章:

C# 异步选择

c# - 使用 Aspose 在 .NET 中将 Excel、PowerPoint、PDF 和 Word 转换为图像

mysql - 如何在没有 GROUP_CONCAT 的情况下将行转换为列?

ado.net - 如何在传递给 DataTable Select() 的字符串中包含撇号?

c# - EF 核心的 hasRequired 的替代品是什么?

mysql - 查询 MySQL 数据库 vs 读取静态文件

php - 如何使用外键信息打印表?

c# - 使用 DataTable.select 时启用区分大小写

javascript - 除了 setTimeout 之外还有什么方法可以强制浏览器重绘?

c# - Azure Graph APi 云打印机列表仅限 100 项