从现有存储过程创建整个DataSet

时间:2010-09-08 13:46:48

标签: visual-studio-2010 stored-procedures dataset strongly-typed-dataset

我有存储过程(它们接受参数),它返回多个结果集,我希望将它保存在一个类型化的数据集中。

问题是:我可以让Visual Studio 2010根据存储过程生成类型化数据集吗?我知道我可以将它用于单个表,但我需要整个dataSet(多个表,每个结果集一个)

2 个答案:

答案 0 :(得分:3)

让我们做一个实验,看看是否可能......

我在SQL 2008数据库中创建了以下存储过程:

CREATE PROCEDURE dbo.StackOverflow3668337
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 'First bit';

    SELECT 'Second bit';
END

然后我在VS2010中创建了一个新项目,并在项目中添加了一个DataSet项目。

我在Server Explorer中创建了与数据库的连接,并将'StackOverflow3668337'项拖到了DataSet设计器界面上。这是结果:

TableAdapter from DataSet Designer

所以这只是一个DataTable。所以不幸的是,我认为答案是开箱即用,“不”。

我认为这样做的主要原因是生成的TableAdapter classes只与单个DataTable绑定。您可以为单个DataTable提供多个TableAdapter,但它们都需要返回相同的数据。单个TableAdapter无法与其他DataTable交互。

答案 1 :(得分:3)

我知道这已经过时了,但当我在搜索相同/类似的答案时,我突然发现了这个问题。所以我想我会把我在这里找到的东西留给我。这不是自动魔法,但这会让你到那里。

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

创建程序

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

创建数据集

  1. 在Visual Studio .NET中,在“文件”菜单上,指向“新建”,然后单击“项目”。
  2. 单击“项目类型”下的“Visual Basic项目”,然后单击“模板”下的“Windows应用程序”。
  3. 在“视图”菜单上,单击“服务器资源管理器”。
  4. 在Server Explorer中,单击“连接到数据库”,然后连接到SQL Server Northwind数据库。
  5. 将Customers和Orders表从Server Explorer拖到当前项目。请注意,SqlConnection对象和两个SqlDataAdapter对象已添加到项目中。
  6. 在“属性”窗口中,单击“生成数据集”,然后将两个表添加到DataSet。请注意,.xsd文件已添加到项目中。 .xsd文件根据您为DataSet类选择的名称命名。
  7. 添加关系

    1. 在“解决方案资源管理器”中,双击您在上一节中创建的.xsd文件。
    2. 右键单击设计器中的Customers表,指向“添加”,然后单击“新建关系”。
    3. 在“编辑关系”对话框中,选择“订单”表作为子元素,然后单击“确定”。这将在DataSet架构中创建名为CustomersOrders的新DataRelation。
    4. 在“文件”菜单上,单击“保存”以保存更改。
    5. <强>填充

      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#的答案。但是应该很容易移植。