Comment puis-je lire plusieurs tables dans un jeu de données?
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.
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