当前位置:  开发笔记 > 编程语言 > 正文

在迭代之前检测IDataReader是否包含某个字段

如何解决《在迭代之前检测IDataReader是否包含某个字段》经验,为你挑选了2个好方法。

所以我使用IDataReader来水合一些业务对象,但我不知道在运行时究竟哪些字段将在读者中.任何不在阅读器中的字段都将在结果对象上保留为null.如何测试读者是否包含特定字段而不将其包装在try/catch中?



1> mrrrk..:

这应该做的伎俩:

    Public Shared Function ReaderContainsColumn(ByVal reader As IDataReader, ByVal name As String) As Boolean
        For i As Integer = 0 To reader.FieldCount - 1
            If reader.GetName(i).Equals(name, StringComparison.CurrentCultureIgnoreCase) Then Return True
        Next
        Return False
    End Function

或(在C#中)

public static bool ReaderContainsColumn(IDataReader reader, string name)
{
    for (int i = 0; i < reader.FieldCount; i++) {
        if (reader.GetName(i).Equals(name, StringComparison.CurrentCultureIgnoreCase)) return true; 
    }
    return false;
}

:O)



2> Tadmas..:

您还可以使用IDataReader.GetSchemaTable获取阅读器中所有列的列表.

http://support.microsoft.com/kb/310107


不确定为什么人们会投票给你 - 这是最好的解决方案
是的,它确实.reader.GetSchemaTable()中每行的第一项.行是列名.ie reader.GetSchemaTable().行[0] [0]给出了第一个列名.
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有