我有一个表链接到ASP.NET成员资格模式中的另一个表。
问题是,ASP.NET表的所有PK都是uniqueidentifier,所以我的也必须这样。当我添加一个SqlDatasource并调用其Insert()方法时,我收到以下错误:
无法将值NULL插入“DiscountCode”列,表'CreamDb.dbo.CustomInfo1';列不允许空值。 INSERT失败。 声明已经终止。
uniqueidentifier也被视为对象(其数据类型),但没有Guid数据类型。我之前遇到过这个问题,但架构更简单,所以我可以解决它。
我该如何解决这个问题?如果我删除了标记中的数据类型部分(所以只留下字段/参数名称而不是数据类型的东西),我得到另一个错误,这是不可能的。
由于
答案 0 :(得分:1)
“没有Guid数据类型”是什么意思? System.Guid
有什么问题?你不能只使用Guid.NewGuid()
,适当地设置字段,然后插入吗?
编辑:只是为了提供更多的肉:将事件处理程序附加到Inserting事件,然后通过DbCommand
返回的SqlDataSourceCommandEventArgs.Command
填充该字段。或者更改INSERT命令使用的SQL,要求数据库为您填充GUID字段。
答案 1 :(得分:0)
处理对ASP.NET成员资格提供程序数据的引用时,一种popullar方法是,而不是保留GUID的正确外键,而是在表中存储类似LoweredUserName的内容。然后,使用Membership Provider的API与您需要的对象进行交互。在某些情况下,您需要一个ObjectDataSource抽象层来完成CRUD场景。
答案 2 :(得分:0)
将SQL Sever中列的默认值设置为“newid()”。
Asp.net不会发送该值,该字段将获得新的guid。