クラス オブジェクトにデータベース テーブルの値を設定しようとしています。フィールドは null 許容のsomeObject.Property
int 型です。
someObject.Property = Convert.ToInt32(dbReader["SomeField"]);
したがって、SomeField
isの場合null
、エラーConvert
が発生しDBNull
ます。これに使用する必要がある特定の方法はありますか?
これはうまくいくはずです...
someObject.Property = dbReader["SomeField"].Equals(DBNull.Value)
? null
: (Int32)dbReader["SomeField"];
@John
- よく釣れます。その見落としを反映するように編集します。
この方法は、あなたがやろうとしていることに役立つかもしれません。列の値をそれぞれのタイプに解析しようとします。それができない場合は、タイプのデフォルト値を返します。
public T ParseValue<T>(System.Data.SqlClient.SqlDataReader reader, string column)
{
T result = default(T);
int index = reader.GetOrdinal(column);
if (!reader.IsDBNull(index))
result = (T)reader.GetValue(index);
return result;
}
私はこれを使用し、デフォルトに置き換え0
ます。プロパティが の場合、nullable
デフォルトで C# になりますnull
。
someObject.Property = (DBNull.Value.Equals(dbReader["SomeField"])) ? 0 : Convert.ToInt32(dbReader["SomeField"]);
を使用できますTryParse
。これは特にNULLをチェックするわけではありませんが、解析可能かどうかを教えてくれます。これはおそらく本当に必要なものです。
bool result = Int32.TryParse(value, out number);
があるTryParse
http://msdn.microsoft.com/en-us/library/f02979c7.aspx
必要に応じて、null 合体演算子を使用し??
てデフォルト値を指定することもできます。
someObject.Property = Convert.ToInt32(dbReader["SomeField"].ToString());
int someFieldIndex = reader.GetOrdinal("SomeField");
someObject.Property = reader.IsDbNull(someFieldIndex) ? null : (Int32?)reader.GetInt32(someFieldIndex);
これを使用できます:
if (reader["SomeField"] != DBNull.Value)
someObject.Property = reader.GetInt32(dbReader("SomeField"));