我有存储过程(他们接受参数),返回多个结果集,我想这样保存在一个类型化的数据集。从现有的存储过程创建整个数据集
问题是:我可以让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