2009-04-30 18 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