SqlDataReader.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

列的名称。

返回

从零开始的列序号。

实现

例外

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

示例

下面的示例演示如何使用 GetOrdinal 方法。

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string str = "Data Source=(local);Initial Catalog=Northwind;"
            + "Integrated Security=SSPI";
        ReadGetOrdinal(str);
    }

    private static void ReadGetOrdinal(string connectionString)
    {
        string queryString = "SELECT DISTINCT CustomerID FROM dbo.Orders;";
        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            SqlCommand command =
                new SqlCommand(queryString, connection);
            connection.Open();

            SqlDataReader reader = command.ExecuteReader();

            // Call GetOrdinal and assign value to variable.
            int customerID = reader.GetOrdinal("CustomerID");

            // Use variable with GetString inside of loop.
            while (reader.Read())
            {
                Console.WriteLine("CustomerID={0}", reader.GetString(customerID));
            }

            // Call Close when done reading.
            reader.Close();
        }
    }
}

注解

GetOrdinal 首先执行区分大小写的查找。 如果失败, (使用数据库排序规则) 进行不区分大小写的比较,将进行第二次不区分大小写的搜索。 当比较受到区域性特定大小写规则的影响时,可能会出现意外结果。 例如,在土耳其语中,以下示例生成错误的结果,因为土耳其语中的文件系统未对“file”中的字母“i”使用语言大小写规则。 如果未找到从零开始的列序号,方法将 IndexOutOfRange 引发异常。

GetOrdinal 不区分假名宽度。

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

适用于