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();

您正在使用DataReader.GetSchemaTable,它返回一个包含给定表的所有架构信息的DataTable

它有以下列:

ColumnName
ColumnOrdinal
ColumnSize
NumericPrecision
// .. 26 others

所以你找不到属于你的表的id列。这就是为什么您收到错误"'id'列不存在"的原因。我怀疑你的第二种方法是否有效。我不明白你为什么需要GetSchemaTable。您只需要将读者推进到下一条记录:

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

相关内容

  • 没有找到相关文章

最新更新