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)
那样硬编码。
您可以在数据读取器上使用GetOrdinal方法从列的字符串名称中获取列的序数。这样,就不必硬编码列索引了。
GetOrdinal在循环中从数据读取器读取数据时也很有用。可以在循环开始之前初始化索引变量,然后在循环的每次迭代中使用它。