當(dāng)GridView+SqlDataSource遇上UniqueIdentifier

2010-08-28 10:50:18來源:西部e網(wǎng)作者:

GridView是Microsoft visual studio.net 2005里的控件,由前一代的DataGrid發(fā)展而來,非常好用。

SqlDataSource也是.net中比前一代更強(qiáng)的數(shù)據(jù)源控件。

初級(jí)做法是,定義好SqlDataSource,讓它成為GridView的DataSource,就可以顯示數(shù)據(jù);

進(jìn)一步,定義DataSource的UpdateCommand與UpdateParameter,不用像.net 2002中那樣另寫MyDataGrid_ItemCommand之類的代碼,就可以自動(dòng)更新數(shù)據(jù)了。

具體步驟是,GridView會(huì)自動(dòng)把Edit模式下的數(shù)據(jù)行的數(shù)據(jù)轉(zhuǎn)化為SqlParameters中定義的對(duì)應(yīng)Sql Paramter的值,然后執(zhí)行SqlCommand里定義的Sql語(yǔ)句。

一切都很好,直到……如果使用UniqueIdentifier數(shù)據(jù)類型作為你的datakey。

uniqueidentifier類似GUID,是microsoft強(qiáng)烈推薦的primary key的數(shù)據(jù)類型選項(xiàng)(相反identity這樣的int類型不被推薦)。但這時(shí)候.net將不能正確執(zhí)行數(shù)據(jù)類型的轉(zhuǎn)換。

這是一種常見類型的.net 2005+sql 2005的錯(cuò)誤:同期推出應(yīng)用項(xiàng)目開發(fā)工具與數(shù)據(jù)庫(kù),導(dǎo)致未能詳細(xì)的進(jìn)行測(cè)試。

解決方法也很簡(jiǎn)單,在SqlDataSource中,不要直接用

select MeetingId, MeetingDateTime, MeetingDesc from dbo.meeting

這樣的sql語(yǔ)句,而改用

select cast(MeetingId as varchar(36)) MeetingId, MeetingDateTime, MeetingDesc from dbo.meeting

這樣,.net部分就會(huì)按照varchar進(jìn)行轉(zhuǎn)換,而從varchar到uniqueidentifier,就由數(shù)據(jù)庫(kù)負(fù)責(zé)了。

原文地址: http://blog.csdn.net/athossmth/archive/2006/05/13/727355.aspx

關(guān)鍵詞:ASP.NET