VS2005 / VS2008 DataSet设计器,在具有自动生成的guid列的表中插入一行

时间:2009-04-30 12:09:18

标签: c# visual-studio-2005 insert dataset dataadapter

我有一个使用VS2005 / VS2008 DataSet设计器创建的强类型DataTable。

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

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

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

我知道如何使用LINQ to SQL实现这一点,但不幸的是,我没有为此项目提供它。

2 个答案:

答案 0 :(得分:2)

可能是其中之一:

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

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

答案 1 :(得分:0)

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

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

还有一些我不知道的其他解决方案......