6

出力パラメータを使用して、ストアド プロシージャから値を返しています。

ストアド プロシージャの宣言は次のとおりです。@GrandTtl DECIMAL(19,3) OUT

SELECTクエリは次のとおりです。

SET @GrandTtl = (SELECT TOP 1 Bill_Amount 
                 FROM Tbl_Restaurant_Kitchen_Order_Bill_Details 
                 WHERE Bill_Number = @billno)

たとえば、選択クエリは値4087.67を返し、出力パラメーター値は4088SQL Server から C# に返されます。

ストアド プロシージャを呼び出す C# コードを次に示します。

SqlCommand cmd = new SqlCommand("Sp_RestCC_BillDetails", con);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter OutParam26 = cmd.Parameters.Add("@GrandTtl", SqlDbType.Decimal,19);

da = new SqlDataAdapter(cmd);

con.Open();
da.Fill(ds, "dtRestCC_Items");
con.Close();

objRCCBEL.GrandTtlOut = Convert.ToDecimal(cmd.Parameters["@GrandTtl"].Value);
4

2 に答える 2

14

C# パラメータを次のように設定する必要があります。

  1. 出力 - 明らかにこれを行っています
  2. 正しい/互換性のあるスケールを持つ 10 進数型

SqlParameter parm = new SqlParameter("@GrandTtl", SqlDbType.Decimal); 
parm.Precision = 19;
parm.Scale = 3;
parm.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(parm);

スケールを設定しない場合、デフォルトは 0 です。参照: SqlParameter.Scale プロパティ

Value が解決される小数点以下の桁数。デフォルトは 0 です。

于 2012-10-05T05:26:40.713 に答える
0

Microsoft decimal(p,s)によると、うまくいくはずです。money 型と smallmoneyt 型は、4 桁の精度を持つ decimal の単なるサブセットです。したがって、C# の OUT パラメータにバインドされている変数の型に問題があると思います。

于 2012-10-05T05:25:51.523 に答える