【问题标题】:How to read multiple resultset from SqlDataReader? [duplicate]如何从 SqlDataReader 读取多个结果集? [复制]
【发布时间】:2013-10-27 06:03:13
【问题描述】:

我有一个 SP,我试图从中返回 2 个结果集,并且在我的 .cs 文件中我正在尝试这样的事情:

dr = cmd.ExecuteReader();
while (dr.Read())
{
  RegistrationDetails regDetails = new RegistrationDetails()
  {
    FName = dr["FName"].ToString(),
    LName = dr["LName"].ToString(),
    MName = dr["MName"].ToString(),
    EntityName = dr["EntityName"].ToString(),// in 2nd result set
    Percentage = dr["Percentage"].ToString()// in 2nd result set
   };
}

但是我得到一个:

错误:IndexOutOfRange {"EntityName"}

【问题讨论】:

    标签: c# .net sqldatareader multiple-resultsets


    【解决方案1】:

    这里有一个关于如何使用数据阅读器处理多个结果集的示例

    static void RetrieveMultipleResults(SqlConnection connection)
    {
        using (connection)
        {
            SqlCommand command = new SqlCommand(
              "SELECT CategoryID, CategoryName FROM dbo.Categories;" +
              "SELECT EmployeeID, LastName FROM dbo.Employees",
              connection);
            connection.Open();
    
            SqlDataReader reader = command.ExecuteReader();
    
            do
            {
                Console.WriteLine("\t{0}\t{1}", reader.GetName(0),
                    reader.GetName(1));
    
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0),
                        reader.GetString(1));
                }               
            }
            while (reader.NextResult());
        }
    }
    

    从多个数据集中检索数据的关键是使用reader.NextResult

    【讨论】:

    • 刚刚遇到这个,这里最好用 do { } while(reader.NextResult()) 。结果集可能为空且 reader.HasRows 将返回 false。
    • 这不仅更好,而且只有正确的方式。请按照Neil M所说的进行相应修复。简单地说 HasRows 退出太早,例如如果第一个结果集为空,第二个结果集有结果。
    猜你喜欢
    • 2013-08-09
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多