我必须完全遗漏一些东西,因为我在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)
什么都不做。
如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
找出任何“我遇到问题”列的数据类型的最佳方法就是这样。
c#
object obj = dataReader.GetValue(123);
我的vb.net尝试翻译
dim obj as object = dataReader.GetValue(123)
“123”是Select Statement的ORDINAL。
现在,当代码运行时,让行(上面)运行。 在上面一行之后的断点处停止它。
然后QuickWatch或将鼠标放在它上面,你可以找出数据类型及其值。
.........
您还应该在“设置”周围进行空检查。
c#code
if (!(dataReader.IsDBNull(123)))
{
string x = dataReader.GetString(123);
}
你必须进行vb.net翻译。