【发布时间】:2012-01-19 14:23:42
【问题描述】:
我在尝试使用类型化数据适配器在 sql server 中创建新行时遇到问题,其中主键设置为 GUID,默认值为 NewSequentialID()
friendInviteID 列是一个 GUID,默认值为 NewSequentialID()
Using myDT As New DAL.mbrFriendInvites.mbrFriendInvitesDataTable
Using myTA As New DAL.mbrFriendInvitesTableAdapters.mbrFriendInvitesTableAdapter
Dim row As DAL.mbrFriendInvites.mbrFriendInvitesRow = myDT.NewmbrFriendInvitesRow
With row
.friendInviteID = Nothing
.mbrID = 11
.appID = 2
.contactEmail = "blah@blah.com"
.contactName = "blah blah"
.timesSent = 0
End With
myDT.AddmbrFriendInvitesRow(row)
Dim result As Integer = myTA.Update(myDT)
HttpContext.Current.Response.Write("rows updated: " & result)
End Using
End Using
当我使用上述方法插入新行时,SQL Server 将friendInviteID 的值设置为:00000000-0000-0000-0000-000000000000
它似乎不想使用 NewSequentialID() 默认值。
我可以手动创建一个 GUID 并以这种方式插入它,但这不会创建一个 SequentialID。
我错过了什么?
【问题讨论】:
-
您在哪里使用标量函数作为默认值,在 SQL-Server 或您的类型化数据集中?如果它真的是一个强类型的 DataSet,那么还有一个自动生成的函数
brFriendInvitesRow.setfriendInviteIDNull()你应该使用。 -
在 SQLServer 中设置为默认值。如果我在 sql server management studio 中打开表并手动向表中添加一行,它将自动插入一个 sequenceID - 所以我知道它在 sql server 中工作。没有 setfriendInviteIDNull 因为它是主键,不能为空。
-
如果在您的数据集中它不能是
null,则应该引发异常,或者它解释了为什么nothing被转换为默认 GUID。您应该尝试在 DataAdapter 中允许 null。 -
我尝试将其设置为允许在数据适配器中使用 Null,但它仍然会引发错误:列 'friendInviteID' 不允许使用 Null。
-
我在这里同意@Tim。我正要写同样的东西。 DataSet 需要将该列的 AllowDbNull 设置为 true。 IIRC。
标签: asp.net visual-studio-2010 sql-server-2005