SqlDataReader -语法正确,必须硬编码列号

本文关键字:编码 语法 SqlDataReader | 更新日期: 2023-09-27 18:05:13

我有一个名为testDB的数据库,其中包含表Versions,其中包含具有日期时间格式的列[Release Date]

现在,我想在我的c# Windows Service中读取它:

protected void SqlConnect()
{
    SqlCommand comSql;
    DateTime relDate;
    SqlDataReader myReader = null;
    using (SqlConnection myConnection = new SqlConnection(_server + 
                                                 _username +
                                                 _password +
                                                 "Trusted_Connection=yes;" +
                                                 "database=testDB; " +
                                                 "connection timeout=30"))
    {
        try
        {
            myConnection.Open();
            comSql = new SqlCommand("select [Release Date] from dbo.Version",
                                                             myConnection);
            myReader = comSql.ExecuteReader();
            while (myReader.Read())
            {
                //Here's my problem, explained below
            }
        }
        catch 
        {
        }
        finally
        {
            if (myReader != null) myReader.Close();
        }
    }
}

现在,我想将存储在该列中的值分配给relDate变量。然而

relDate = myReader.GetDateTime();

要求GetDateTime在那里传递列号(如果我理解正确的话)。但是我已经在我的comSql中选择了列。这是处理这个问题的正确方法吗?只是在代码中输入列号吗?

编辑:好吧,从答案来看,我可能说错了这个问题。

我知道我必须传递列索引给GetDateTime()。我问是否有一种方法可以做到这一点,而不像GetDateTime(0)那样硬编码。

SqlDataReader -语法正确,必须硬编码列号

您可以在数据读取器上使用GetOrdinal方法从列的字符串名称中获取列的序数。这样,就不必硬编码列索引了。

GetOrdinal在循环中从数据读取器读取数据时也很有用。可以在循环开始之前初始化索引变量,然后在循环的每次迭代中使用它。