2008-10-04 52 views
4

我有一個存儲過程返回多個表。我怎樣才能執行和讀取兩個表?如何將多個表讀入數據集?

我有這樣的事情:

 

SqlConnection conn = new SqlConnection(CONNECTION_STRING); 
SqlCommand cmd = new SqlCommand("sp_mult_tables",conn); 
cmd.CommandType = CommandType.StoredProcedure); 

IDataReader rdr = cmd.ExecuteReader(); 
 

我不知道如何讀它...最新最好的方式來處理這種類型的查詢,我猜我應該將數據讀入一個數據集?如何做到這一點的最佳方式?

謝謝。

回答

5

MSDN改編:

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

如果您想將結果讀入DataSet,最好使用DataAdapter。

但是使用DataReader,首先遍歷第一個結果集,然後調用NextResult以前進到第二個結果集。

0

讀者將按返回的順序處理結果集;當完成處理第一個結果集時,請調用rdr.NextResult()以設置下一個結果集

還要注意,表格適配器將自動將所有結果集讀取到填充數據集中的表中,但數據表將是無類型的並命名爲表1,表2,等

0

*讀所有的Excel工作表名稱和添加多個片材與表名如表名稱單個數據集*

「全局變量

昏暗excelSheetNames作爲字符串()

昏暗DtSet作爲System.Data.DataSet中=新數據集()

私人小組btnLoadData_Click(BYVAL發件人爲System.Object的,BYVALË作爲System.EventArgs)把手btnLoadData.Click

昏暗MyConnection的作爲的OleDbConnection

昏暗噠作爲System.Data.OleDb.OleDbDataAdapter

Dim i As Integer

MyConnection = New System.Data.OleDb.OleDbConnection(「provider = Microsoft.Jet.OLEDB.4.0;

數據源= SStatus.xls;擴展屬性= 「」 的Excel 8.0; HDR = NO; IMEX = 1 「」「)

「下面的方法獲取所有在gloabal陣列excelSheetNames Excel表單名稱

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 

公共功能GetExcelSheetNames(BYVAL excelFileName作爲字符串)

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