所以我使用IDataReader来水合一些业务对象,但我不知道在运行时究竟哪些字段将在读者中.任何不在阅读器中的字段都将在结果对象上保留为null.如何测试读者是否包含特定字段而不将其包装在try/catch中?
这应该做的伎俩:
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)
您还可以使用IDataReader.GetSchemaTable
获取阅读器中所有列的列表.
http://support.microsoft.com/kb/310107