0

I have this and it works fine:

SqlDataAdapter da = new SqlDataAdapter("SELECT * from tblA; SELECT * from tblB",cs);

I want this:

SqlDataAdapter da = new SqlDataAdapter("spA; spB",cs);
da.SelectCommand.CommandType = CommandType.StoredProcedure;

It says I can only use one stored procedure at a time. How can I use this two queries with two stored procedures?

4

5 回答 5

1

SQL

CREATE PROCEDURE spC AS
    @param_for_A int,          -- Parameter for SP 'spA'
    @param_for_B nvarchar(50)  -- Parameter for SP 'spB'
BEGIN
    EXEC spA @sqA = @param_for_A;
    EXEC spB @sqB = @param_for_B;
END

C#

SqlDataAdapter da = new SqlDataAdapter("spC", cs);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter("@param_for_A", 123));
da.SelectCommand.Parameters.Add(new SqlParameter("@param_for_B", "demo"));
DataSet myDS = new DataSet();
da.Fill(myDS);

然后ds.Tables集合包含所有返回的表,按顺序:

  • ds.Tables[0] - 第一个“SP in SP”的结果
  • ds.Tables[1] - 第二个“SP in SP”的结果
于 2013-07-08T15:50:35.920 回答
0

T-SQL 要求对所有情况都执行存储过程,EXEC MyProc;除非批处理只有一条语句——在这种情况下,“EXEC”的使用是可选的。要执行两个存储过程,在您的示例中,您只需将它们添加到语句字符串中:

SqlDataAdapter da = new SqlDataAdapter("EXEC spA; EXEC spB",cs);
da.SelectCommand.CommandType = CommandType.Text; // optional (it's default)

有关 MSDN 的更多信息

于 2013-07-08T15:58:38.337 回答
0

我能想到的一种解决方案是创建第三个存储过程,它调用您要调用的两个存储过程。

于 2013-07-08T15:44:13.723 回答
0

另一种方法是您可以将多个存储过程作为文本传递。command.CommandType = CommandType.Text;

在它们之间加上逗号。

于 2013-07-08T15:51:03.787 回答
0

考虑更改为使用 SqlDataReader - 它可以通过使用 NextResult 方法处理多个结果集。

于 2013-07-08T15:51:04.743 回答