2009-07-12 10 views
2

DB.NullをC#で10進数に変換する方法はありますか?CでDB.Nullを10進数に変換する方法

Object[] returnvalue = new Object[1]; 
returnvalue[0] = null; 
returnvalue[0] = Convert.ToDecimal(returnvalue[returnvalue.Length - 1]); 

同様もののCLRはDBNull.Valueのはキャスト型にすることはできませんと言っています。まだ私はそこにあることを知りたいです

どのような回避策ですか? ありがとうございます

+0

をどこ 'あなたの例ではDBNull'ですか?それは単純な「ヌル」です。 –

+0

DBNullはnullと少し異なります。 Nullは利用可能なオブジェクトがないことを意味します。 DBNullは値が不明であることを意味します。 DBNullを取得した場合、その値は現在のところ定義されていません。どのように小数点に変換できますか?デフォルト値を自分で決定して割り当てる必要があります。 –

答えて

7

どのようにnullを何かにキャストすると思いますか?それがnullだ、何も、灘は...

は言った、あなたの最善の策ではなく、 nullDBNullものの両方が重要なを持っているものは何でも default(decimal)/ DBNull(または null上記の場合)および使用/リターンをチェックすることです単にデフォルト値との意味上の違い。彼らは価値がないので、おそらくあなたがしたいことではありません。

0

DBNullをDecimalに変換する場合、10進数にはどのような値がありますか?

Decimal.TryParse()関数がうまく機能しなくなると思います。

5

DBNullnullの間に大きな違いがあります。あなたの例だけが表示されますnull ...

しかし、答えでは、本当に...あなたがそれを与える価値は何ですか?

あなたがテストし、デフォルトを使用、または(別名decimal?)をNullable<decimal>使用することができますnull(ないDBNull

decimal? valOrNull = (decimal?)returnvalue[0]; 

かで

考慮にDBNullを取るために:

object val = returnvalue[0]; 
decimal? valOrNull = (val == null || val is DBNull) ? (decimal?)null 
      : (decimal?)val; // or convert if it is a string etc 
3

あなたの戻り値にヌル可能な10進数を使用することを検討しましたか?

DB.Nullを明示的に処理する必要がありますが、これはnullと異なるため、ケースを区別することができます。

コードは次のようなものに見えるかもしれません...

if (value == DB.Null) 
    return null; 
else return decimal.Parse(value.ToString()); 
3
 object foo = DBNull.Value; 
     decimal d = 0; 

     d = (decimal)(foo as decimal? ?? 0); // handles dbnull fine with default 0 

     MessageBox.Show(d.ToString()); 

     foo = 1234M; 

     d = (decimal)(foo as decimal? ?? 0); // handles dbnull fine with default 0 

     MessageBox.Show(d.ToString()); 
+0

さらに短く:10進数でd = foo? ?? 0メートル –

0

このヘルプをしませんか?

returnvalue[returnvalue.Length - 1] is DBNull ? 0 : (decimal?)returnvalue[returnvalue.Length - 1] ?? 0 
1

あなたは、単にこれを行うことができます。

Object[] returnvalue = new Object[1]; 
returnvalue[0] = DBNull.Value; //null from database 
returnvalue[0] = returnvalue[0] == DBNull.Value 
? null 
: (Nullable<decimal>) Convert.ToDecimal(returnvalue[returnvalue.Length - 1]); 
+0

その交換することが可能: **戻り値[0] == DBNull.Valueの** に: ** Convert.IsDbNull(戻り値[0])** が同じように動作します。 – fsbflavio

関連する問題