C#:检索非参数化存储过程查询的输出参数?

Ste*_*ger 1 c# sql t-sql stored-procedures output-parameter

我有这个存储过程

CREATE PROCEDURE [dbo].[TestProcedure] 
     @param1 int = 0
    ,@param2 int = 0
    ,@total_sales int = 5 OUTPUT 
AS
BEGIN
    SET NOCOUNT ON;

    SET @total_sales = @total_sales * 5
    SELECT * FROM SomeTable
END
Run Code Online (Sandbox Code Playgroud)

这个字符串在C#中

string strSQL = @"
                DECLARE @RC int
                DECLARE @param1 int
                DECLARE @param2 int
                DECLARE @total_sales int

                -- TODO: Set parameter values here.
                SET @param1 = 1
                SET @param2 = 2

                EXECUTE @RC = [TestDB].[dbo].[TestProcedure] 
                   @param1
                  ,@param2
                  ,@total_sales OUTPUT";
Run Code Online (Sandbox Code Playgroud)

现在我想检索输出值,但没有参数化输入查询!

我试过这个:

using (System.Data.SqlClient.SqlCommand cmd = (System.Data.SqlClient.SqlCommand)idbConn.CreateCommand())
{
   cmd.CommandText = strSQL;
   cmd.Transaction = (System.Data.SqlClient.SqlTransaction)idbtTrans;

   iAffected = cmd.ExecuteNonQuery();
   idbtTrans.Commit();

   string strOutputParameter = cmd.Parameters["@total_sales"].Value.ToString();
   Console.WriteLine(strOutputParameter);
} // End Using IDbCommand
Run Code Online (Sandbox Code Playgroud)

这会引发异常(参数@total_sales不在参数列表中).

如何在非参数化存储过程调用中检索输出参数而不参数化查询

Jam*_*iec 6

简答:你做不到.

长答案:您需要以更标准的方式使用ADO.NET,以便利用输出参数等内容.