如何选择SQL Server 2008 uniqueidentifier并将其放在.net Guid变量中?

时间:2012-04-03 14:34:21

标签: .net sql-server uniqueidentifier

我在选择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()而没有运气。

感谢阅读。

4 个答案:

答案 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的解决方案。

  1. ViewState(“Guid变量”)=(“Guid value”)
  2. 将myGuid视为Guid myGuid =(“Guid value”)
  3. 第一个解决方案在页面回发后保留可变数据,而第二个解决方案不保留。享受!