SqlDataReader和方法范围

时间:2014-04-07 10:10:05

标签: c#-4.0 sqldatareader

为什么从SqlDataReader读取的数据不能用于方法调用? 我有一个表,其中'id'为列。 当我对数据库进行查询时,它会返回行。

此代码不起作用(称'id'列不存在):

con.Open();
SqlDataReader requestReader = cmd.ExecuteReader();
if (requestReader.HasRows)
{
   DataTable requestTable = requestReader.GetSchemaTable();
   request = ReadRequest(requestTable.Rows[0]);        
}

con.Close();

虽然这个有效:

con.Open();
SqlDataReader requestReader = cmd.ExecuteReader();
if (requestReader.HasRows)
{
   DataTable requestTable = requestReader.GetSchemaTable();
   var requestRow = requestTable.Rows[0];
   request = new Request();
   request.UniqueId = (string)requestRow["id"];
}

con.Close();

1 个答案:

答案 0 :(得分:1)

您正在使用DataReader.GetSchemaTable返回DataTable,其中包含给定表格的所有架构信息。

它有以下列:

ColumnName
ColumnOrdinal
ColumnSize
NumericPrecision
// .. 26 others

因此,您找不到属于您的表的id-column。这就是为什么你得到错误“'id'列不存在”。我怀疑你的第二种方法是否奏效。我不明白为什么你需要GetSchemaTable。你只需要让读者进入下一个记录:

if (requestReader.HasRows && requestReader.Read())
{
   int id = requestReader.GetInt32(requestReader.GetOrdinal("id"));
   // ...
}