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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top