web-dev-qa-db-fra.com

Renvoyer plusieurs tables à partir d'une procédure stockée

Dans mon application Winform, j'ai le scénario suivant:

Je veux obtenir plusieurs tables sur un seul événement. Renvoyer toutes les tables sous la forme dataset dans single server cycle, ou obtenir une table à la fois et utiliser separate server cycle for each table quel est le meilleur? Quels sont les avantages les uns par rapport aux autres?

25
Nithesh

La façon normale est de tout faire en même temps.

construisez simplement vos SELECT et vous aurez un DataSet rempli de toutes les tables.

using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(myConnString))
{
    using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
    {
        cmd.CommandText = "myMultipleTablesSP";
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;

        conn.Open();

        System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(cmd);

        DataSet ds = new DataSet();
        adapter.Fill(ds);

        conn.Close();
    }
}

si par exemple vous retournez 2 tables dans votre SP, comme:

SELECT * FROM [TableA];
SELECT * FROM [TableB];

vous accéderiez à ces tables en tant que:

DataTable tableA = ds.Tables[0];
DataTable tableB = ds.Tables[1];
49
balexandre

Si vous chargez chaque table séparément et utilisez des threads, vous pouvez considérablement améliorer les performances.

Les jeux de données sont également très lourds ... essayez donc de les éviter si possible.

1
c0deNinja