【问题标题】:SqlDataReader and method scopeSqlDataReader 和方法范围
【发布时间】:2014-04-07 10:10:05
【问题描述】:

为什么从 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();

【问题讨论】:

  • 那不起作用的 ReadRequest 的代码是什么?
  • 愚蠢的问题。就像蒂姆说的,即使是第二种方法也不起作用,但由于快速测试和代码结构,我没听懂。谢谢大家。

标签: c#-4.0 sqldatareader


【解决方案1】:

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

它有以下列:

ColumnName
ColumnOrdinal
ColumnSize
NumericPrecision
// .. 26 others

因此,您找不到属于您的表的 id 列。这就是为什么您会收到错误“'id' 列不存在”。我怀疑您的第二种方法是否有效。我根本不明白你为什么需要GetSchemaTable。您只需将阅读器推进到下一条记录:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2017-12-22
    相关资源
    最近更新 更多