Wie kann ich mehrere Tabellen in einem Datensatz lesen?
Frage
Ich habe eine gespeicherte Prozedur, die mehrere Tabellen zurückgibt. Wie kann ich beiden Tabellen ausführen und lesen?
Ich habe so etwas wie folgt aus:
SqlConnection conn = new SqlConnection(CONNECTION_STRING);
SqlCommand cmd = new SqlCommand("sp_mult_tables",conn);
cmd.CommandType = CommandType.StoredProcedure);
IDataReader rdr = cmd.ExecuteReader();
Ich bin nicht sicher, wie es zu lesen ... was ist der beste Weg, um diese Art der Abfrage zu handhaben, ich vermute, ich soll die Daten in ein DataSet lesen? Wie ist der beste Weg, dies zu tun?
Danke.
Lösung
Angepasst von MSDN :
using (SqlConnection conn = new SqlConnection(connection))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(query, conn);
adapter.Fill(dataset);
return dataset;
}
Andere Tipps
Wenn Sie die Ergebnisse in einem DataSet lesen möchten, sollten Sie besser einen Dataadapter verwendet wird.
Aber mit einem Datareader, erster Iteration durch die erste Ergebnismenge, dann ruft Nextresult auf den zweiten Ergebnissatz zu gelangen.
wird der Leser mit den Ergebnismengen in der Reihenfolge, zurückgegeben; bei der Verarbeitung des ersten Ergebnismenge fertig, ruft rdr.NextResult () für die nächsten zu setzen
Beachten Sie auch, dass ein Tabellenadapter automatisch alle Ergebnismengen in Tabellen in einem Datensatz auf fill lesen, aber die Datentabellen werden nicht typisiert und der Namen Tabelle 1, Tabelle 2, usw. sein.
* Reading Alle Blattnamen Excel und mehrere Blätter in einzelnen Datensatz mit Tabellennamen als Blattnamen hinzufügen. *
'Globale Variablen
Dim excelSheetNames As String ()
Dim Dtset Wie System.Data.DataSet = New DataSet ()
Private Sub btnLoadData_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Griffe btnLoadData.Click
Dim MyConnection Wie OleDbConnection
Dim da Als System.Data.OleDb.OleDbDataAdapter
Dim i As Integer
MyConnection = New System.Data.OleDb.OleDbConnection ( "provider = Microsoft.Jet.OLEDB.4.0;
data source = SStatus.xls; Erweiterte Eigenschaften = "" Excel 8.0; HDR = NO; IMEX = 1 "" „)
"folgende Methode erhält alle Excel-Namen in den gloabal Array 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
Public Function 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