2013-10-18 13 views
19

Ho un SP da quello che sto cercando di tornare 2 set di risultati da, e in mio file cs sto provando qualcosa di simile:Come leggere più risultati da SqlDataReader?

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 
    }; 
} 

Comunque sto ottenendo un:

error:IndexOutOfRange {"EntityName"}

risposta

44

Qui avete un esempio su come gestire più set di risultati con un lettore di dati

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

     while (reader.HasRows) 
     { 
      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)); 
      } 
      reader.NextResult(); 
     } 
    } 
} 

La chiave per il recupero di dati da più set di dati sta usando reader.NextResult

+2

Appena trovato questo, sarebbe meglio usare do {} while (reader.NextResult()) qui. Il set di risultati potrebbe essere vuoto e reader.HasRows restituirà false. –

Problemi correlati