2008-10-04 7 views
4

J'ai une procédure stockée qui retourne plusieurs tables. Comment puis-je exécuter et lire les deux tables?Comment puis-je lire plusieurs tables dans un ensemble de données?

J'ai quelque chose comme ceci:

 

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 ... ce qui est la meilleure façon de gérer ce type de requête, je suppose que je devrais lire les données dans un DataSet? Comment est la meilleure façon de faire cela?

Merci.

Répondre

5

Adapté de MSDN.

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

Si vous voulez 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 deuxième jeu de résultats.

0

le lecteur traitera les ensembles de résultats dans l'ordre retourné; Lorsque vous avez terminé le traitement du 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 des tables d'un dataset lors du remplissage, mais que les datatables ne seront pas typées et nommée Table1, Table2, etc.

0

* lecture Tous les noms de feuilles Excel et l'ajout de plusieurs feuilles dans simple jeu de données avec les noms de table en tant que noms de feuille *

« Les variables globales

Dim excelSheetNames As String()

Dim DtSet Comme System.Data.DataSet = New DataSet()

Private Sub btnLoadData_Click (sender ByVal comme System.Object, ByVal e As System.EventArgs) traite btnLoadData.Click

Dim MyConnection Comme OleDbConnection

Dim da Comme System.Data.OleDb.OleDbDataAdapter

Dim i As Integer

MyConnection = Nouveau System.Data.OleDb.OleDbConnection ("provider = Microsoft.Jet.OLEDB.4.0;

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

« méthode suivante obtient tous les noms de feuille Excel dans le 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