2009-04-30 19 views
3

我有用VS2005/VS2008 DataSet设计器创建的强类型DataTable。VS2005/VS2008 DataSet设计器,向具有自动生成的guid列的表中插入一行

该表具有一个主键列,该主键列是由SQL服务器填充的guid。问题是,当我想要添加一行(或多行)到我的DataTable,然后调用DataAdapter.Update方法(传递DataTable)。当调用DataAdapter.Update时,我得到一个SQL异常,说我不能将NULL插入到主键列中。

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

我在这里错过了什么,或者这是DataSet设计器的限制吗?

我知道如何使用LINQ to SQL来实现这一点,但unfortunatley我没有这个项目可供我使用。

回答

2

可能的其中之一:

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

对于前两个选项,如果你想要让设计师让你的结构同步与数据库的方便,那么你可以删除列或允许空编程,也许旁边的一个“// HACK :“解释原因的评论。

0

你很可能在你的SQL Server表定义上使用了DEFAULT NEWID(),所以问题可能是数据集设计者没有看到这个列是自动生成的。

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

还有可能是我不知道的一些其他的解决办法...

+0

是的,我只是看着表定义,它被指定为DEFAULT(newid())。这应该是什么使它起作用?我无法更改表格的定义,但很高兴知道它应该如何设置。 – 2009-04-30 14:29:54