在ado.net中从sql server获取数据时,是否需要检查db null或任何其他null?

时间:2016-05-21 11:46:38

标签: c# ado.net

 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);

2 个答案:

答案 0 :(得分:1)

无论哪种方式,你都在进行防御性检查。如果列可以为null(即列是可空列),则执行空检查,编程nullDBNull不同,因此最好检查DBNull是否{ {1}}。

对于dr["count"] != DBNull.Value,你也很自然地表达同样的事情,因为TryParse()名称建议不会在失败时直接抛出异常而导致TryParse()

我宁愿检查列的可空性并相应地对该列进行计算。

答案 1 :(得分:0)

如果您说的是真的,如果不检查DBNull,如何区分空字符串和DBNull? 它可能不适用于您的情况,但空字符串不是DBNull!