2017-02-10 2 views
1

Ich führe eine paramterisierte SQL Stored Procedure aus, die zwei Select-Anweisungen ausführt. Ich möchte dem zurückgegebenen Ergebnis eine DataSet() zur einfacheren Verarbeitung zuweisen. Doch meiner Syntax bekomme ich einen Fehler vonIterieren von DataSet-Tabellen

kann nicht implizit

Typ ‚System.Data.DataTable‘ auf ‚System.Data.DataSet‘ konvertieren

Kann mir jemand zeigen, wie zu tun, was Ich bin nach hier? - Anstatt darauf als ds.Tables[0]; zu verweisen, möchte ich einen aussagekräftigen Namen zuordnen.

public DataSet RunOneStoredProc() 
{ 
    DataSet dataset = new DataSet(); 
    using (var conn = new SqlConnection(SQLCon)) 
    { 
     var cmd = new SqlCommand("GetTeachersStudents", conn); 
     cmd.Parameters.Add("@yearstart", SqlDbType.Date, 100); 
     cmd.Parameters.Add("@yearend", SqlDbType.Date, 100); 
     cmd.Parameters["@yearstart"].Value = dtpStartDate.Value.ToString("MM/dd/yyyy"); 
     cmd.Parameters["@yearend"].Value = dtpEndDate.Value.ToString("MM/dd/yyyy"); 
     cmd.CommandType = CommandType.StoredProcedure; 
     var ds = new DataSet(); 
     using (var da = new SqlDataAdapter(cmd)) 
      da.Fill(ds); 
     return dataset; 
    } 
} 

private void btnPush_Click(object sender, EventArgs e) 
{ 
    DataSet ds = new DataSet(); 
    DataSet teachers = new DataSet(); 
    DataSet students = new DataSet(); 
    ds = RunOneStoredProc(); 
    teachers = ds.Tables[0]; 
    students = ds.Tables[1]; 

} 

Antwort

1

Versuchen Sie dies. Sie erstellen auch eine neue Instanz von DataSet ds. Dies ist nicht notwendig, da RunOneStoredProc() eine neue Instanz zurückgibt.

private void btnPush_Click(object sender, EventArgs e) 
    { 
     DataSet ds = RunOneStoredProc(); 
     DataTable teachers = ds.Tables[0]; 
     DataTable students = ds.Tables[1]; 

    } 
+0

Wenn Sie den Index nicht für den Zugriff auf die verschiedenen Tabellen im Datensatz verwenden möchten, können Sie Namen verwenden. 'DataTable Lehrer = ds.Tables [" Lehrer "];' –

+0

Sie sagten, ich erstelle eine neue Instanz von ds. Meinst du entfernen Sie die DataSet-DS-Deklaration von RunOneStoredProc()? –

+1

Sie müssen keine weitere Instanz von DataSet erstellen. DataSet ds = new DataSet(); 'Weil' RunOneStoredProc() 'bereits eine neue Instanz zurückgibt. –