DataTableReader.GetOrdinal(String) 方法

定义

在给定列名时获取相应的列序号。

public:
 override int GetOrdinal(System::String ^ name);
public override int GetOrdinal (string name);
override this.GetOrdinal : string -> int
Public Overrides Function GetOrdinal (name As String) As Integer

参数

name
String

列的名称。

返回

从零开始的列序号。

例外

尝试读取或访问已关闭的 DataTableReader 中的列。

指定的名称不是有效的列名。

示例

如果只有一个列名,在这种情况下,列名是用户提供的,并且必须从该列中检索信息,则可以使用如下过程提取所需的信息。 在此示例中, 过程接受列名,并为 中的 DataTableReader 当前行返回该列中包含的数据:

private static object GetValueByName(
    DataTableReader reader, string columnName)
{
    // Consider when to use a procedure like this one carefully:
    // if you're going to retrieve information from a column
    // in a loop, it would be better to retrieve the column
    // ordinal once, store the value, and use the methods
    // of the DataTableReader class directly.
    object columnValue;

    try
    {
        int columnOrdinal = reader.GetOrdinal(columnName);
        columnValue = reader.GetValue(columnOrdinal);
    }
    catch (ArgumentException ex)
    {
        // Throw all other errors back out to the caller.
        columnValue = null;
    }
    return columnValue;
}
Private Function GetValueByName( _
   ByVal reader As DataTableReader, _
   ByVal columnName As String) As Object

   ' Consider when to use a procedure like this one carefully:
   ' If you're going to retrieve information from a column
   ' in a loop, it would be better to retrieve the column
   ' ordinal once, store the value, and use the methods
   ' of the DataTableReader class directly. 
   Dim columnValue As Object

   Try
      Dim columnOrdinal As Integer = reader.GetOrdinal(columnName)
      columnValue = reader.GetValue(columnOrdinal)
   Catch ex As ArgumentException
      ' Throw all other errors back out to the caller.
      columnValue = Nothing
   End Try
   Return columnValue
End Function

注解

由于 类提供的 DataTableReader 大多数方法都必须提供序号列号,因此可以使用 GetOrdinal 方法检索列号(给定列的名称)。

GetOrdinal 首先执行区分大小写的查找。 如果失败,则进行第二次不区分大小写的搜索。 如果未找到 IndexOutOfRangeException 列号,则会引发 。

GetOrdinal 不区分假名宽度。

因为基于序号的查找比命名查找更高效,因此在循环内调用 GetOrdinal 效率低下。 通过调用 GetOrdinal 一次并将结果分配给整数变量以在循环中使用来节省时间

适用于