私はこのストアドプロシージャC#:パラメータ化されていないストアドプロシージャクエリの出力パラメータを取得しますか?
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
と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";
そして今、私は、出力値を取得したい、が、入力クエリをパラメータ化なしでこの文字列を持っています!
私はこの試みた:(パラメータ@total_salesは、パラメータリストではありません)
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
をそして、これは例外をスローします。
パラメータ化されていないストアドプロシージャコールで出力パラメータを取得するにはというクエリをパラメータなしで出力するにはどうすればよいですか?
パラメータ化の嫌悪感は何ですか? – canon
antisanity:データベースアクセスのための独自のメソッドがあり、SQL文字列が自動的に作成されます。私はいくつかのパラメータを追加するだけで、もう一度それを分解することを開始したくありません。 –
@Quandary:SqlClientで既に提供されている機能をクラスで利用できるようにするために、別にしたくないですか? – canon