Il blog di Emanuele Mattei in ambito Database

Programmazione database, ado.net e database mobile

Blog

Siti

Siti Sql Server

Siti vari

Tools

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

Try

DatiCmd = New SqlCommand(SqlTabDati, ConDati)

AnagraficaCmd = New SqlCommand(SqlTabAnagrafica, ConDati)

AnagraficaCmd.Parameters.Add("@id", SqlDbType.Int)

 

ConDati.Open()

Dim idDati As Integer

Using DatiReader = DatiCmd.ExecuteReader()

While DatiReader.Read()

idDati = CInt(DatiReader("id"))

AnagraficaCmd.Parameters("@id").Value = idDati

Using AnagraficaReader As SqlDataReader = AnagraficaCmd.ExecuteReader()

While AnagraficaReader.Read()

MessageBox.Show("Dati: " & AnagraficaReader("nazione"))

End While

End Using

 

End While

End Using

 

 

Catch exdb As SqlException

MessageBox.Show("ERrore:" & exdb.Message)

Return

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

}

Posted: dic 20 2008, 04.28 by EmanueleM | with no comments
Filed under: