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