2009-04-09 73 views
0

我有一个链接到ASP.NET成员资格架构中的另一个表的表。无法在字段为Guid的情况下插入null(SqlDataSource中的对象)

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

无法将NULL值插入'DiscountCode'列'CreamDb.dbo.CustomInfo1'列;列不允许有空值。 INSERT失败。 该声明已被终止。

uniqueidentifier也被视为一个对象(它的数据类型),但没有Guid数据类型。我之前有过这个问题,但是架构要简单得多,所以我可以修复它。

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

感谢

回答

1

你是什么意思“没有GUID数据类型”是什么意思? System.Guid有什么不对?你不能只使用Guid.NewGuid(),适当地设置字段,并进行插入?

编辑:只是为了给更多的肉:附加一个事件处理程序到Inserting事件,然后通过SqlDataSourceCommandEventArgs.Command返回的DbCommand填充字段。或者更改INSERT命令使用的SQL来要求数据库为您填充GUID字段。

+0

嗨, 我的意思是在标记(aspx)中没有要使用的Guid数据类型。只有对象存在。您可以通过添加一个在表上执行CRUD的SQL数据源来尝试此操作,然后检查标记并查看参数的数据类型的智能感知。 – dotnetdev 2009-04-09 13:56:54

+0

这不是C#的问题,它纯粹是.NET。我不应该写任何自定义代码,因为sqldatasource应该为我处理繁重的工作。 – dotnetdev 2009-04-09 13:58:25

+0

好吧,在我看来,SqlDataSource为你做了很多繁重的工作,而且你只需编写一小段代码在创建新行时填写正确的值。 (我对SqlDataSource没有太多经验,但应该很容易。) – 2009-04-09 14:05:56

0

当处理对ASP.NET成员资格提供程序数据的引用时,popullar方法不是保留适当的GUID外键,而是在您的表中存储类似LoweredUserName的内容。然后,使用Membership Provider的API与您需要的对象进行交互。在某些情况下,您需要一个ObjectDataSource抽象层来完成CRUD场景。

0

将SQL Sever中的列的默认值设置为“newid()”。

Asp.net不会发送该值,并且该字段将获得新的guid。

相关问题