我有存儲過程(他們接受參數),返回多個結果集,我想這樣保存在一個類型化的數據集。從現有的存儲過程創建整個數據集
問題是:我可以讓Visual Studio 2010根據存儲過程生成類型化數據集嗎?我知道我能有這樣的一個表,但我需要整個數據集(多個表,每一個結果集)
我有存儲過程(他們接受參數),返回多個結果集,我想這樣保存在一個類型化的數據集。從現有的存儲過程創建整個數據集
問題是:我可以讓Visual Studio 2010根據存儲過程生成類型化數據集嗎?我知道我能有這樣的一個表,但我需要整個數據集(多個表,每一個結果集)
因此,讓我們做一個實驗,看看是否有可能..
我創建在SQL 2008數據庫中的以下存儲過程:
CREATE PROCEDURE dbo.StackOverflow3668337
AS
BEGIN
SET NOCOUNT ON;
SELECT 'First bit';
SELECT 'Second bit';
END
然後,我在VS2010中創建一個新的項目,並添加一個DataSet項目到項目中。
我在服務器資源管理器中創建了一個到數據庫的連接,並將'StackOverflow3668337'項拖到DataSet設計器表面上。這是結果:
因此,這將只是一個數據表。所以很不幸,我認爲答案是開箱即用,「不」。
我認爲這樣做的主要原因是生成的TableAdapter classes只與一個DataTable綁定。您可以爲單個DataTable擁有多個TableAdapter,但他們都需要返回相同的數據。單個TableAdapter無法與其他DataTable進行交互。
我知道這是舊的,但我在這個問題上找到相同/相似的答案。所以我想我會離開我在這裏找到的那些追隨我的人。這不是自動的魔法,但這會讓你在那裏。
http://support.microsoft.com/kb/322793
創建過程
CREATE PROCEDURE dbo.sp_GetCustOrd
AS
SELECT * FROM Customers;
SELECT * FROM Orders;
創建的DataSet
添加關係
填寫
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#的答案。但應該很容易移植。
我可以確認此方法有效。我能夠在一個過程中返回兩個表並使用此方法填充強類型數據集。我還測試了使用參數來控制返回哪個表。這工作,但需要兩個調用da.Fill(ds.Table)和da.Fill(ds.Table1)。不知道,但如果您的唯一目標是儘量減少數據庫中的程序數量,也可以。 – bdwakefield 2011-12-06 14:36:02