【问题标题】:Prevent Typed DataSet updating PK column防止 Typed DataSet 更新 PK 列
【发布时间】:2012-05-03 01:17:25
【问题描述】:

我有一个类型化的数据集,在我调用TableAdapter.Update(DataRow) 的地方,执行的 SQL 包括数据库主键列的更新。

不幸的是,当此代码在复制数据库上运行时,PK 列设置了 rowguid 属性,我收到以下错误:

System.Data.SqlClient.SqlException:不允许使用 rowguidcol 属性更新列。 事务在触发器中结束。该批次已中止。 在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent,BatchCommandInfo[] batchCommands,Int32 commandCount) 在 System.Data.Common.DbDataA...

如何防止tableadapter更新该列(值相同)?

【问题讨论】:

  • 在您输入的数据集上是实际标记为主键的主键列

标签: c# sql primary-key sql-update strongly-typed-dataset


【解决方案1】:

您可以在DataSet 设计器中手动编辑为更新命令创建的SQL 只需单击适配器并找到UpdateCommand。您是否有理由更新主键?如果不是(而且你不应该,如果可能的话),那么你应该从命令中删除它。

【讨论】:

  • 我完全不想更新 PK - 这是自动生成的 SQL,不是我。不过,您对编辑它提出了一个很好的观点。唯一的麻烦是,如果/当通过设计器重新生成类时,编辑将丢失
【解决方案2】:

如果您的列实际上被标记为类型化 DataSet 中的主键,则自动生成的更新语句不应该尝试更新它。我会查看设计器并仔细检查它是否真的是主键。

【讨论】:

  • 是的 = 我已经检查过了,它看起来很好。我可能会尝试从头开始重新生成它,看看是否有什么不同。
猜你喜欢
  • 2011-10-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多