无法在字段为Guid的位置插入null(SqlDataSource中的对象)

时间:2009-04-09 13:50:07

标签: asp.net

我有一个表链接到ASP.NET成员资格模式中的另一个表。

问题是,ASP.NET表的所有PK都是uniqueidentifier,所以我的也必须这样。当我添加一个SqlDatasource并调用其Insert()方法时,我收到以下错误:

无法将值NULL插入“DiscountCode”列,表'CreamDb.dbo.CustomInfo1';列不允许空值。 INSERT失败。 声明已经终止。

uniqueidentifier也被视为对象(其数据类型),但没有Guid数据类型。我之前遇到过这个问题,但架构更简单,所以我可以解决它。

我该如何解决这个问题?如果我删除了标记中的数据类型部分(所以只留下字段/参数名称而不是数据类型的东西),我得到另一个错误,这是不可能的。

由于

3 个答案:

答案 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。