10

データ行(dr)の列がnullの場合に爆発するように見える次のコードがあります。データ行から値を解析してnullチェックを処理する正しい方法は何ですか?

Person person = new Person()
{
    FirstName = dr["FirstName"].ToString(),
    LastName = dr["LastName"].ToString(),
    BusinessPhoneNumber = dr["BusinessPhone"].ToString(),
4

5 に答える 5

10

列が文字列型であるがnull許容である場合は、次のことを試してみてください。

// FirstName must allow null
FirstName = dr["FirstName"] as string

また

// FirstName would be empty for a NULL in the database
FirstName = (dr["FirstName"] as string) ?? string.Empty 
于 2009-11-21T14:45:11.623 に答える
4

データセルがnullになることは、問題の原因にはなり得ないと思います。列が存在しないか、その他のエラーが発生したか、DataRow自体がnullである可能性があり、それを処理する必要があります。例外を見てください-「爆破するようです」はあなたの問題の有効な説明ではありません。

以下はそれを説明しますが、他のみんなのためにタイトルからの質問にも答えます。

列の値がnullの場合、オブジェクトSystem.DBNullが返され.ToString()、空の文字列が返されますが、(string)またはas stringが返されnullます。

したがって、返されたアイテムをチェックすることは意味==nullがありません。これは、に評価されないためtrueです。

  • 結果として空の文字列を受け入れる場合、コードはすでに最適であり、DBNullケースを処理する必要はありません。
  • 取得したい場合はnull、に変更.ToString()してas stringください。
  • 他の方法で処理する場合は、の後にターゲット変数を使用if (dr.IsNull("FirstName"))または実行します。==nullas string
于 2014-09-12T08:18:15.850 に答える
2

dr["FirstName"].ToString()ToStringnullオブジェクトにアクセスしようとしているため、nullポインタ例外がスローされることがあります。それ以外の場合、文字列はnullになる可能性があるため、実際には、文字列であることがわかっていて、nullであることを気にしない場合は、安全に実行できます。

FirstName = (String) dr["FirstName"]
于 2009-11-21T14:46:06.740 に答える
1

列とデフォルト値をヘルパー関数に渡します。ヘルパー関数はnullをチェックし、nullの場合はデフォルトを返し、nullでない場合は列の値を返します。

于 2009-11-21T14:44:51.047 に答える
1

列がnullの場合は、以下を使用して空白の文字列を返すことができます。

FirstName = string.format("{0}", dr["FirstName"])
于 2009-11-21T14:48:14.083 に答える