Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

difference between NextResult and MARS

What's the difference between using .NextResult and Multiple Active Result Sets?

sqlReader.NextResult();

while (sqlReader.Read())
{
    MessageBox.Show("From third SQL - " + 
                    sqlReader.GetValue(0) + " - " + 
                    sqlReader.GetValue(1));
}

MARS

private static string GetConnectionString()
{
    // To avoid storing the connection string in your code,
    // you can retrive it from a configuration file.
    return "Data Source=(local);Integrated Security=SSPI;" + 
           "Initial Catalog=AdventureWorks;MultipleActiveResultSets=True";
}
like image 584
Rod Avatar asked Apr 17 '26 14:04

Rod


1 Answers

They're almost opposites.

With .NextResult, a single piece of code is consuming multiple result sets sequentially. It works through (as much of) each result set in turn by calling .Read, and then when it no longer wants to work on that result set, it calls .NextResult to move onto the next one. Once you've called .NextResult, there's no way to continue consuming the previous result set.

All of these result sets must have been requested as part of the original query that was submitted to generate the DataReader. (Either as separate SELECT statements, or calling a stored procedure that contains such calls, or a combination of the two)

With MARS, whilst you're consuming a result set through a DataReader, you can submit a separate query on the same connection that generates a new, separate DataReader. Both readers may be accessed in parallel.

like image 71
Damien_The_Unbeliever Avatar answered Apr 20 '26 04:04

Damien_The_Unbeliever