无法从MS SQL表字段中检索GUID

时间:2014-06-23 12:55:46

标签: sql-server vb.net sql-server-2008

我必须完全遗漏一些东西,因为我在MS SQL 2008数据表中拥有各种数据类型字段,除了新添加的GUID数据(uniqueidentifier类型)之外,我能够正确地检索所有数据。 我的.net应用程序有一个GUID字段的阅读器设置,但是当我单步执行代码并对本地对象进行赋值时,它从来没有任何数据,它只是一个空的GUID。 在SSMS中运行相同的存储过程清楚地显示了在结果集中拾取的GUID。

任何人都可以给我任何可能出错的线索或一些调试技巧吗? (Visual Studio 2008 .net 3.5,vb.net,MS SQL Server 2008 r1)

这是我的vb.net iDataReader

  Public Class DataReaderHelper
    Implements IDataReader

    Private _Reader As IDataReader
    Private strFields() As String

    Public Sub New(ByVal _DataReader As IDataReader)
        ' Load the fields array with uppercased field names in the reader
        ReDim strFields(0 To _DataReader.FieldCount - 1)
        For iIndex As Integer = 0 To _DataReader.FieldCount - 1
            strFields(iIndex) = _DataReader.GetName(iIndex).ToUpper
        Next
        _Reader = _DataReader
    End Sub

    Public Function FieldIndex(ByVal FieldName As String) As Integer
        ' Returns the ordinal position of the named field
        ' in the datareader, or a -1 if the field is not found
        Return Array.IndexOf(strFields, FieldName.ToUpper)
    End Function


#Region "SetObjectProperty overloads"
    ' Type-specific overloads to allow data object properties to
    ' be consistently populated with values if the encapsulated 
    ' data reader contains data for the specified field name.

    Public Sub SetObjectProperty(ByVal FieldName As String, _
                             ByRef ObjectProperty As Guid)
        ' Set the GUID object property if the referenced field exists
        ' in the data reader. If the field does not exist or is null,
        ' set the property to an empty GUID.
        Dim GuidValue As Guid
        Dim intIndex As Integer = FieldIndex(FieldName)
        If intIndex > -1 AndAlso Not _Reader.IsDBNull(intIndex) Then
            GuidValue = _Reader.GetGuid(intIndex)
        End If
        ObjectProperty = GuidValue

    End Sub

字段名称正确,列索引正确。 我介绍了这段代码,但这条线似乎没有取得任何价值。 GuidValue始终为EMPTY,好像_Reader.GetGuid(intIndex)什么都不做。

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

找出任何“我遇到问题”列的数据类型的最佳方法就是这样。

c#

object obj = dataReader.GetValue(123);

我的vb.net尝试翻译

dim obj as object = dataReader.GetValue(123)

“123”是Select Statement的ORDINAL。

现在,当代码运行时,让行(上面)运行。 在上面一行之后的断点处停止它。

然后QuickWatch或将鼠标放在它上面,你可以找出数据类型及其值。

.........

您还应该在“设置”周围进行空检查。

c#c​​ode

if (!(dataReader.IsDBNull(123)))
    {
        string x = dataReader.GetString(123);
    }

你必须进行vb.net翻译。