3

我有一个使用 VS2005/VS2008 数据集设计器创建的强类型数据表。

该表有一个主键列,它是一个 guid,由 SQL 服务器填充。问题是当我想向我的 DataTable 添加一行(或多行)然后调用DataAdapter.Update方法(传入 DataTable)时。当调用DataAdapter.Update时,我收到一条 SQL 异常,提示我无法将 NULL 插入主键列。

如何告诉设计人员这是一个自动生成的列,我不想为新行提供值?我只想要 SQL 生成的值。

我在这里遗漏了什么,或者这是 DataSet 设计器的限制?

我知道如何使用 LINQ to SQL 来实现这一点,但不幸的是,我无法为这个项目使用它。

4

2 回答 2

2

可能是其中之一:

  • 如果您的应用不需要 DataSet 中的列,请将其删除。
  • 如果您想要该列但不关心给它一个值,则将其更改为允许 DBNull。
  • 您始终可以关闭约束强制(可能是个坏主意): DataSet.EnforceConstraints = false
  • 您可以使用不会发送到数据库的代理键填充该列。

对于前两个选项,如果您想让设计人员方便地使您的结构与数据库保持同步,那么您可以删除列或以编程方式允许 null,也许就在“// HACK:”注释旁边,解释原因。

于 2009-05-02T18:19:36.763 回答
0

您可能在 SQL Server 表定义中使用了 DEFAULT NEWID(),因此问题可能是数据集设计器没有将此列视为自动生成的。

也许在您的应用程序代码中生成 guid 可能是一个解决方案?如果没有,那么您可以在 Dataset 中设置默认值,但您可能还必须更改 DataAdapter 插入/更新语句,以便此默认值不会插入到 Sql Server 表中。

也可能有其他一些我不知道的解决方案......

于 2009-04-30T14:25:10.510 回答