代码之家  ›  专栏  ›  技术社区  ›  veljkoz Danko Valkov

从现有存储过程创建整个数据集

  •  5
  • veljkoz Danko Valkov  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 11 年前
        1
  •  3
  •   David Gardiner    14 年前

    所以让我们做一个实验,看看是否有可能……

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

    create procedure dbo.stackoverflow3668337
    AS
    开始
    设置NoCon;
    
    选择“第一位”;
    
    选择“第二位”;
    结束
    < /代码> 
    
    

    然后我在VS2010中创建了一个新项目,并向该项目添加了一个数据集项。

    我在服务器资源管理器中创建了与数据库的连接,并将“stackoverflow3668337”项拖到数据集设计器图面上。结果是:

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

    我认为造成这种情况的主要原因是,生成的TableAdapter类仅绑定到单个DataTable。对于单个数据表,可以有多个TableAdapter,但它们都需要返回相同的数据。单个TableAdapter无法与其他数据表交互。

    SQL 2008数据库中的ng存储过程:

    CREATE PROCEDURE dbo.StackOverflow3668337
    AS
    BEGIN
        SET NOCOUNT ON;
    
        SELECT 'First bit';
    
        SELECT 'Second bit';
    END
    

    然后我在VS2010中创建了一个新项目,并向该项目添加了一个数据集项。

    我在服务器资源管理器中创建了与数据库的连接,并将“stackoverflow3668337”项拖到数据集设计器图面上。结果是:

    TableAdapter from DataSet Designer

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

    我认为主要原因是TableAdapter classes生成的数据只绑定到一个数据表。对于单个数据表,可以有多个TableAdapter,但它们都需要返回相同的数据。单个TableAdapter无法与其他数据表交互。

        2
  •  3
  •   bdwakefield    13 年前

    我知道这很古老,但当我在寻找相同/相似的答案时,我偶然发现了这个问题。所以我想我会把我在这里找到的东西留给后面的人。这不是自动魔法,但这会让你达到目的。

    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. 在服务器资源管理器中,单击“连接到数据库”,然后连接到SQL Server Northwind数据库。
    5. 将客户和订单表从服务器资源管理器拖到当前项目。请注意,一个sqlconnection对象和两个sqldataadapter对象被添加到项目中。
    6. 在“属性”窗口中,单击“生成数据集”,然后将两个表都添加到数据集。注意,一个.xsd文件被添加到项目中。.xsd文件是根据您为数据集类选择的名称命名的。

    添加关系

    1. 在解决方案资源管理器中,双击在上一节中创建的.xsd文件。
    2. 右键单击设计器中的“客户”表,指向“添加”,然后单击“新建关系”。
    3. 在“编辑关系”对话框中,选择“订单”表作为子元素,然后单击“确定”。这将在数据集架构中创建名为CustomerOrders的新数据关系。
    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答案。但应该足够容易的移植过来。