我在选择uniqueidentifier
类型的列并将其放入ASP.net中Guid
类型的变量时遇到问题。
数据库正在生成uniqueidentifier
,我想要做的就是将它们拉出并存储值,以防我需要填充外键表。
我正在使用私人会员来存储价值:
Private _uniqueID as guid
我从表中SELECT
使用名为SqlDataReader
的{{1}}。所有其他值都很好,但是当我添加它时我得到一个错误:
vRdr
我得到的错误是
输入字符串的格式不正确。
我不确定为什么我在尝试选择这些值时会遇到很多麻烦。我还在数据阅读器上尝试了if not isDBNull( vRdr("uniqueID")) then
_uniqueID = vRdr.GetGuid("uniqueID")
end if
和Guid.Parse()
而没有运气。
感谢阅读。
答案 0 :(得分:3)
根据the MSDN docs,GetGuid()采用列序号,而不是字符串键。将您的代码更改为:
_uniqueID = vRdr.GetGuid(vRdr.GetOrdinal("uniqueID"))
答案 1 :(得分:1)
您是否尝试过从数据库值创建新的Guid
?
示例:
_uniqueID = New Guid(vRdr("uniqueID").ToString())
答案 2 :(得分:0)
如果您在循环中调用GetOrdinal()(对于结果集中的X记录),这可能会非常昂贵。您希望一次性保存GetOrdinal()的值并重复使用。
或者,您可以使用[]
上的IDataReader
运算符,并在给定列的字符串标识符的情况下编制索引。这返回object
,但只是将其转换为Guid。请注意,按字符串索引也会调用GetOrdinal,至少在SqlDataReader
。
Guid myGuid = (Guid)vRdr["uniqueID"];
答案 3 :(得分:0)
对于许多版本的.net框架,通常会有许多程序可用。下面是两个实际适用于我的Visual Studio 2012的解决方案。
第一个解决方案在页面回发后保留可变数据,而第二个解决方案不保留。享受!