Ado.Net esempio di MARS (Multiple Active Result Sets) tramite VB.Net e C#
Con Ado.Net versione 2 o successiva, possiamo eseguire più batch su una singola connessione. Nelle versioni precedenti era possibile eseguire un batch alla volta su una singola connessione. L'esecuzione di più batch con MARS non implica l'esecuzione simultanea delle operazioni.
Questo avviene impostando nella connectionstring il parametro MultipleActiveResultSets a true.
Es.
MultipleActiveResultSets=True
Qui di seguito si riporta un frammento di codice.
VB.Net
Dim con As String = "Data Source=(local);Integrated Security=SSPI; Initial Catalog=test; MultipleActiveResultSets=True"Using ConDati As New SqlConnection(con)
Dim SqlTabDati As String = "Select id from Dati"
Dim SqlTabAnagrafica As String = "Select * from Anagrafica where id = @id"Dim DatiCmd As SqlCommand
Dim AnagraficaCmd As SqlCommand
TryDatiCmd = New SqlCommand(SqlTabDati, ConDati)
AnagraficaCmd =
New SqlCommand(SqlTabAnagrafica, ConDati)AnagraficaCmd.Parameters.Add("@id", SqlDbType.Int)
ConDati.Open()
Dim idDati As IntegerUsing DatiReader = DatiCmd.ExecuteReader()
While DatiReader.Read()idDati = CInt(DatiReader("id"))
AnagraficaCmd.Parameters(
"@id").Value = idDatiUsing AnagraficaReader As SqlDataReader = AnagraficaCmd.ExecuteReader()
While AnagraficaReader.Read()MessageBox.Show("Dati: " & AnagraficaReader("nazione"))
End WhileEnd Using
End WhileEnd Using
Catch exdb As SqlException
MessageBox.Show(
"ERrore:" & exdb.Message)
ReturnCatch ex As Exception
MessageBox.Show(
"ERrore:" & ex.Message)
Return
End Try
ConDati.Close()
End Using
C#
string con = "Data Source=(local);Integrated Security=SSPI; Initial Catalog=test; MultipleActiveResultSets=True";using (SqlConnection ConDati = new SqlConnection(con))
{
string SqlTabDati = "Select id from Dati";string SqlTabAnagrafica = "Select * from Anagrafica where id = @id";
SqlCommand DatiCmd;SqlCommand AnagraficaCmd;
try
{
DatiCmd = new SqlCommand(SqlTabDati, ConDati);
AnagraficaCmd =
new SqlCommand(SqlTabAnagrafica, ConDati);AnagraficaCmd.Parameters.Add("@id", SqlDbType.Int);
ConDati.Open();
SqlDataReader DatiReader;
int idDati;using (DatiReader = DatiCmd.ExecuteReader())
{
while (DatiReader.Read())
{
idDati = (int)(DatiReader["id"]);
AnagraficaCmd.Parameters[
"@id"].Value = idDati;using (SqlDataReader AnagraficaReader = AnagraficaCmd.ExecuteReader())
{
while (AnagraficaReader.Read())
{
MessageBox.Show("Dati: " + AnagraficaReader["nazione"]);
}
}
}
}
}
catch (SqlException exdb)
{
MessageBox.Show("ERrore:" + exdb.Message);return;
}
catch (Exception ex)
{
MessageBox.Show("ERrore:" + ex.Message);return;
}
ConDati.Close();
}