2009-04-09 14 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。

相關問題