using (SqlCommand cmd = new SqlCommand("[StoredProcedureName]"))
{
cmd.Parameters.Add("@Param1", SqlDbType.Int).Value = "20";
cmd.Parameters.Add("@Param2", SqlDbType.Int).Value = "5";
cmd.CommandType = CommandType.StoredProcedure;
using (SqlDataReader dr = db.SelectQry(cmd))
{
if (dr.Read())
{
int returnValue;
int.TryParse(dr["count"].ToString(), out countDealerOfTheMonthCars);
usedCarModel.DealerOfTheMonth.CountDealerOfTheMonthCars = countDealerOfTheMonthCars;
}
}
}
我注意到人们放置了像(dr [“count”]!= DBNull.Value)这样的支票,然后只做dr [“count”]。ToString()。
但我注意到在C#中的空字符串中甚至是DBNull.Value.ToString()。所以我的问题是我们需要有任何这样的db null或null检查,或者我们可以直接执行: int.TryParse(dr [“count”]。ToString(),out count);
答案 0 :(得分:1)
无论哪种方式,你都在进行防御性检查。如果列可以为null(即列是可空列),则执行空检查,编程null
与DBNull
不同,因此最好检查DBNull
是否{ {1}}。
对于dr["count"] != DBNull.Value
,你也很自然地表达同样的事情,因为TryParse()
名称建议不会在失败时直接抛出异常而导致TryParse()
。
我宁愿检查列的可空性并相应地对该列进行计算。
答案 1 :(得分:0)
如果您说的是真的,如果不检查DBNull,如何区分空字符串和DBNull? 它可能不适用于您的情况,但空字符串不是DBNull!