5

クラス オブジェクトにデータベース テーブルの値を設定しようとしています。フィールドは null 許容のsomeObject.Propertyint 型です。

someObject.Property = Convert.ToInt32(dbReader["SomeField"]);

したがって、SomeFieldisの場合null、エラーConvertが発生しDBNullます。これに使用する必要がある特定の方法はありますか?

4

8 に答える 8

5

これはうまくいくはずです...

someObject.Property = dbReader["SomeField"].Equals(DBNull.Value)
    ? null
    : (Int32)dbReader["SomeField"];

@John- よく釣れます。その見落としを反映するように編集します。

于 2011-05-19T16:58:00.100 に答える
3

この方法は、あなたがやろうとしていることに役立つかもしれません。列の値をそれぞれのタイプに解析しようとします。それができない場合は、タイプのデフォルト値を返します。

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;
}
于 2011-05-19T17:05:10.513 に答える
2

私はこれを使用し、デフォルトに置き換え0ます。プロパティが の場合、nullableデフォルトで C# になりますnull

someObject.Property = (DBNull.Value.Equals(dbReader["SomeField"])) ? 0 : Convert.ToInt32(dbReader["SomeField"]);
于 2011-05-19T16:57:37.290 に答える
1

を使用できますTryParse。これは特にNULLをチェックするわけではありませんが、解析可能かどうかを教えてくれます。これはおそらく本当に必要なものです。

bool result = Int32.TryParse(value, out number);
于 2011-05-19T16:58:48.260 に答える
1

があるTryParse

http://msdn.microsoft.com/en-us/library/f02979c7.aspx

必要に応じて、null 合体演算子を使用し??てデフォルト値を指定することもできます。

于 2011-05-19T16:58:05.140 に答える
0
someObject.Property = Convert.ToInt32(dbReader["SomeField"].ToString()); 
于 2011-05-19T17:12:21.823 に答える
0
int someFieldIndex = reader.GetOrdinal("SomeField");
someObject.Property = reader.IsDbNull(someFieldIndex) ? null : (Int32?)reader.GetInt32(someFieldIndex);
于 2011-05-19T17:00:17.557 に答える
0

これを使用できます:

if (reader["SomeField"] != DBNull.Value)
    someObject.Property = reader.GetInt32(dbReader("SomeField"));
于 2011-05-19T16:58:13.900 に答える