5

我有存儲過程(他們接受參數),返回多個結果集,我想這樣保存在一個類型化的數據集。從現有的存儲過程創建整個數據集

問題是:我可以讓Visual Studio 2010根據存儲過程生成類型化數據集嗎?我知道我能有這樣的一個表,但我需要整個數據集(多個表,每一個結果集)

回答

3

因此,讓我們做一個實驗,看看是否有可能..

我創建在SQL 2008數據庫中的以下存儲過程:

CREATE PROCEDURE dbo.StackOverflow3668337 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 'First bit'; 

    SELECT 'Second bit'; 
END 

然後,我在VS2010中創建一個新的項目,並添加一個DataSet項目到項目中。

我在服務器資源管理器中創建了一個到數據庫的連接,並將'StackOverflow3668337'項拖到DataSet設計器表面上。這是結果:

TableAdapter from DataSet Designer

因此,這將只是一個數據表。所以很不幸,我認爲答案是開箱即用,「不」。

我認爲這樣做的主要原因是生成的TableAdapter classes只與一個DataTable綁定。您可以爲單個DataTable擁有多個TableAdapter,但他們都需要返回相同的數據。單個TableAdapter無法與其他DataTable進行交互。

3

我知道這是舊的,但我在這個問題上找到相同/相似的答案。所以我想我會離開我在這裏找到的那​​些追隨我的人。這不是自動的魔法,但這會讓你在那裏。

http://support.microsoft.com/kb/322793

創建過程

CREATE PROCEDURE dbo.sp_GetCustOrd 
AS 
SELECT * FROM Customers; 
SELECT * FROM Orders; 

創建的DataSet

  1. 在Visual Studio .NET,在文件菜單,指向新建,然後單擊項目。
  2. 單擊「項目類型」下的「Visual Basic項目」,然後單擊「模板」下的「Windows應用程序」。
  3. 在視圖菜單上,單擊服務器資源管理器。
  4. 在服務器資源管理器中,單擊「連接到數據庫」,然後連接到SQL Server Northwind數據庫。
  5. 將客戶和訂單表從服務器資源管理器拖動到當前項目。注意SqlConnection對象和兩個SqlDataAdapter對象被添加到項目中。
  6. 在「屬性」窗口中,單擊「生成數據集」,然後將兩個表都添加到DataSet中。注意一個.xsd文件被添加到項目中。 .xsd文件根據您爲DataSet類選擇的名稱命名。

添加關係

  1. 在Solution Explorer中,雙擊您在上一節中創建的.xsd文件。
  2. 右鍵單擊設計器中的Customers表,指向添加,然後單擊新建關係。
  3. 在編輯關係對話框中,選擇訂單表作爲子元素,然後單擊確定。這將在DataSet模式中創建一個名爲CustomersOrders的新DataRelation。
  4. 在文件菜單上,單擊保存以保存更改。

填寫

Dim da As New SqlDataAdapter("sp_GetCustOrd", SqlConnection1) 
da.SelectCommand.CommandType = CommandType.StoredProcedure 
da.TableMappings.Add("Table", "Customers") 
da.TableMappings.Add("Table1", "Orders") 
Dim ds As New CustOrd()  ' Change this name to match .xsd file name. 
da.Fill(ds) 
DataGrid1.DataSource = ds 
DataGrid1.DataMember = "Customers" 

我知道這個例子是在VB,我一直在尋找C#的答案。但應該很容易移植。

+0

我可以確認此方法有效。我能夠在一個過程中返回兩個表並使用此方法填充強類型數據集。我還測試了使用參數來控制返回哪個表。這工作,但需要兩個調用da.Fill(ds.Table)和da.Fill(ds.Table1)。不知道,但如果您的唯一目標是儘量減少數據庫中的程序數量,也可以。 – bdwakefield 2011-12-06 14:36:02