我有存储过程(它们接受参数),它返回多个结果集,我希望将它保存在一个类型化的数据集中。
问题是:我可以让Visual Studio 2010根据存储过程生成类型化数据集吗?我知道我可以将它用于单个表,但我需要整个dataSet(多个表,每个结果集一个)
答案 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设计器界面上。这是结果:
所以这只是一个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;
创建数据集
添加关系
<强>填充强>
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#的答案。但是应该很容易移植。