2017-02-10 4 views
1

私は、2つのselectステートメントを実行するparamterized SQLストアドプロシージャを実行しています。簡単な処理のために返された結果にDataSet()を割り当てたいと思います。しかし、私の構文で、私は暗黙的に型「たSystem.Data.DataTable」を変換できませんデータセットテーブルの反復

のエラーが出る「でSystem.Data.DataSet」

誰かがどのように何をすべきか私を見ることができます

私はここにいる? - それを参照するのではなく、ds.Tables[0];私は意味のある名前を関連づけたいと思います。

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]; 

} 

答えて

1

これを試してください。 DataSet dsという新しいインスタンスも作成しています。 RunOneStoredProc()は新しいインスタンスを返すので、不要です。

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

    } 
+0

インデックスを使用してデータセットの異なるテーブルにアクセスしたくない場合は、名前を使用できます。 'DataTable teachers = ds.Tables [" teachers "];' –

+0

私はdsの新しいインスタンスを作成しています。 RunOneStoredProc()からDataSet ds declerationを削除することを意味しますか? –

+1

'RunOneStoredProc()'はすでに新しいインスタンスを返すので、DataSet 'DataSet ds = new DataSet();'の別のインスタンスを作成する必要はありません。 –