Question

J'ai une procédure stockée qui renvoie plusieurs tables. Comment puis-je exécuter et lire les deux tables?

J'ai quelque chose comme ça:


SqlConnection conn = new SqlConnection(CONNECTION_STRING);
SqlCommand cmd = new SqlCommand("sp_mult_tables",conn);
cmd.CommandType = CommandType.StoredProcedure);

IDataReader rdr = cmd.ExecuteReader();

Je ne sais pas comment le lire. Quel est le meilleur moyen de gérer ce type de requête? Je suppose que je devrais lire les données dans un DataSet? Quelle est la meilleure façon de procéder?

Merci.

Était-ce utile?

La solution

Adapté de MSDN :

using (SqlConnection conn = new SqlConnection(connection))
{
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand(query, conn);
    adapter.Fill(dataset);
    return dataset;
}

Autres conseils

Si vous souhaitez lire les résultats dans un DataSet, vous feriez mieux d'utiliser un DataAdapter.

Mais avec un DataReader, commencez par parcourir le premier jeu de résultats, puis appelez NextResult pour passer au second jeu de résultats.

le lecteur traitera les jeux de résultats dans l’ordre retourné; Lorsque vous avez fini de traiter le premier jeu de résultats, appelez rdr.NextResult () pour définir le suivant

Notez également qu'un adaptateur de table lira automatiquement tous les jeux de résultats dans les tables d'un jeu de données lors du remplissage, mais que les tables de données seront non typées et nommées Table1, Table2, etc.

* Lecture de tous les noms de feuille Excel et ajout de plusieurs feuilles dans un seul jeu de données avec les noms de table comme noms de feuille. *

'Variables globales

Dim excelSheetNames As String ()

Dim DtSet As System.Data.DataSet = Nouveau DataSet ()

Private Sub btnLoadData_Click (expéditeur de ByVal en tant que System.Object, ByVal et en tant que System.EventArgs) gère btnLoadData.Click

Dim MyConnection As OleDbConnection

Dim da As System.Data.OleDb.OleDbDataAdapter

Dim i As Integer

MyConnection = New System.Data.OleDb.OleDbConnection (" fournisseur = Microsoft.Jet.OLEDB.4.0;

source de données = SStatus.xls; Propriétés étendues = "" Excel 8.0; HDR = NON; IMEX = 1 "" ")

'La méthode suivante obtient tous les noms de feuille Excel du tableau gloabal excelSheetNames

GetExcelSheetNames ("SStatus.xls")

        For Each str As String In excelSheetNames
            da = New OleDbDataAdapter("select * from [" & str & "]", MyConnection)
            da.Fill(DtSet, excelSheetNames(i))
            i += 1
        Next           
        DataGridView1.DataSource = DtSet.Tables(0)          

End Sub

Fonction publique GetExcelSheetNames (ByVal excelFileName As String)

    Dim con As OleDbConnection = Nothing

    Dim dt As DataTable = Nothing

    Dim conStr As String = ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=") + excelFileName & ";Extended Properties=Excel 8.0;"

    con = New OleDbConnection(conStr)
    con.Open()
    dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
    excelSheetNames = New String(dt.Rows.Count - 1) {}
    Dim i As Integer = 0

    For Each row As DataRow In dt.Rows
        excelSheetNames(i) = row("TABLE_NAME").ToString()
        i += 1
    Next
End Function
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top