1

CompanyDetails という 1 つのオブジェクトをリストに追加する必要があるため、データベースからデータを取得し、それをコンストラクターにロードします。

result.Add(new CompanyDetails() { 
    Name = dr["name"].ToString(), 
    City = dr["city"].ToString(), 
    StreetName = dr["streetName"].ToString(), 
    StreetNr = Convert.ToInt32(dr["apartmentNr"]), 
    Tax = int.Parse(dr["TAX"].ToString() )});

StreetNrTaxnull 値を持つことができます。そして、それを実行しようとすると、エラーが発生します:

オブジェクトを DBNull から他の型にキャストすることはできません

どうすれば修正できますか?通常、tax または streetNr が DBNull と等しいかどうかを確認する必要があることはわかっていますが、この場合はどうすればよいかわかりません。

これはクラス CompanyDetails です:

public class CompanyDetails
{
    public string Name { get; set; }
    public string City { get; set; }
    public string StreetName { get; set; }
    public int? StreetNr { get; set; }
    public int? Tax { get; set; }

}
4

4 に答える 4

3
Tax = dr["TAX"] == DBNull.Value ? 0 : (int)dr["TAX"]

それが であるかどうかをチェックし、そうである場合は値をnullに設定し、そうでない場合は整数値を割り当てます。int0

それをコードに適用します。

result.Add(new CompanyDetails() { 
    Name = dr["name"].ToString(), 
    City = dr["city"].ToString(), 
    StreetName = dr["streetName"].ToString(), 
    StreetNr = dr["apartmentNr"] == DBNull.Value ? 0 : (int)dr["apartmentNr"]
    Tax = dr["TAX"] == DBNull.Value ? 0 : (int)dr["TAX"]
    )});

編集:とがすでにタイプ の
場合は、の代わりに割り当てるだけです。 StreetNrTaxint?null0

result.Add(new CompanyDetails() { 
    Name = dr["name"].ToString(), 
    City = dr["city"].ToString(), 
    StreetName = dr["streetName"].ToString(), 
    StreetNr = dr["apartmentNr"] == DBNull.Value ? (int?)null : (int)dr["apartmentNr"]
    Tax = dr["TAX"] == DBNull.Value ? (int?)null : (int)dr["TAX"]
    )});
于 2013-11-04T13:14:00.663 に答える
1

どうですか:

object tmp = dr["apartmentNr"];
int? apartmentNr = tmp is DBNull ? (int?)null : (int)tmp;

または簡単に-「dapper」などのツールを使用して、これらすべてを行う必要がないようにします...

var row = conn.Query<CompanyDetails>("select * from ...", args).FirstOrDefault();

また:

var rows = conn.Query<CompanyDetails>("select * from ...", args).ToList();
于 2013-11-04T13:12:24.147 に答える
1

このようにする必要があります。

dr["TAX"] is DBNull ? string.Empty : dr["TAX"].ToString();
于 2013-11-04T13:13:39.343 に答える
-1

あなたはおそらく次のようにすることができます:

StreetName = (dr["streetName"] + "")

これにより、null の場合は空の文字列が返され、そうでない場合は DB からの文字列が返されます。

于 2013-11-04T13:12:27.790 に答える