1

SQL Serverに出力パラメータpfタイプnumeric(18,0)を持つストアドプロシージャがあります。 C#1からIはSqlDbType.DecimalSqlParameterを作成し、私はここでは0C#からストアドプロシージャにパラメータを渡す:数値(18、0)に使用するSQLDbType

に18とスケールに精密に設定私のコードである:

queryParameters[2] = new SqlParameter("@Id", SqlDbType.Decimal); 
queryParameters[2].Precision = 18; // # digits 
queryParameters[2].Scale = 0;  // # decimals 
queryParameters[2].Direction = ParameterDirection.Output; 

ストアドプロシージャが正常に実行され、正しく出力パラメータを返しているが、これをC#の長い変数に解析すると、次のようになります。

​​

これは変換できません。

SqlParameterのタイプをSqlDbType.Bigintに変更すると動作します。

私はそれをSqlDbType.BigIntとして渡すことで正しいと思いますか?または、それをSqlDbType.Decimalとして渡し、longの代わりに10進のC#変数を使用する方が良いでしょうか?

SqlDbType.Decimalとしてそれを渡した後、以下のことにも取り組んでいる。

decimal id = (decimal)queryParameters[2].Value; 

だから何なアプローチが最善のこの数は小数なし整数であることを考慮に入れていますか?

答えて

2

それがデータベース内numeric(...)として定義なら、それはだは、C#でdecimalなければならない - それは(現在)のコンマの後かの数字を持っているかどうか。

bigint/longと誤って表現しないでください。そのタイプではありません。また、なぜそれを解析/最初にlongに変換しようとしていますか?私には意味がありません.....それは、decimalのように見えるdecimalのように歩き、decimalのように鳴く - そして、あなたはそれがdecimal IS かなり確信しています!

突然SQL Serverのタイプがnumeric(20,2)に変更されたらどうなりますか? C#でdecimalを使用すると、変更は必要ありません。 longを代わりに使用した場合は、コードをdecimalに変更する必要があります。

常に

最も適切なタイプを使用する - とT-SQL numeric()のために、それは、C#/。NETでdecimalです。

+0

私は同意します。ありがとう。 – user1624552

関連する問題