DBNull if语句

时间:2012-05-03 12:55:02

标签: c# dbnull

我正在尝试执行一个存储过程,然后使用if语句来检查空值,并且我做得很短。我是一个VB人,所以如果我犯了小学生语法错误,请耐心等待。

objConn = new SqlConnection(strConnection);
objConn.Open();
objCmd = new SqlCommand(strSQL, objConn);
rsData = objCmd.ExecuteReader();
rsData.Read();

if (!(rsData["usr.ursrdaystime"].Equals(System.DBNull.Value)))
        {
            strLevel = rsData["usr.ursrdaystime"].ToString();

        }

这是否允许我检查SQL连接是否只返回一个值,如果是,那么填充我的字符串?

我习惯于只检查下面的内容,看看是否正在返回一个值而不确定我是否正确使用C#

如果不是IsDBNull(rsData(“usr.ursrdaystime”))

任何帮助将不胜感激!

9 个答案:

答案 0 :(得分:89)

这应该有效。

if (rsData["usr.ursrdaystime"] != System.DBNull.Value))
{
    strLevel = rsData["usr.ursrdaystime"].ToString();
}

还需要添加using语句,如下文:

using (var objConn = new SqlConnection(strConnection))
     {
        objConn.Open();
        using (var objCmd = new SqlCommand(strSQL, objConn))
        {
           using (var rsData = objCmd.ExecuteReader())
           {
              while (rsData.Read())
              {
                 if (rsData["usr.ursrdaystime"] != System.DBNull.Value)
                 {
                    strLevel = rsData["usr.ursrdaystime"].ToString();
                 }
              }
           }
        }
     }

这将自动处理(关闭)块{..}之外的资源。

答案 1 :(得分:9)

惯用的方式是:

if(rsData["usr.ursrdaystime"] != DBNull.Value) {
    strLevel = rsData["usr.ursrdaystime"].ToString();
}

此:

rsData = objCmd.ExecuteReader();
rsData.Read();

让它看起来像你正在读取一个值。请改用IDbCommand.ExecuteScalar

答案 2 :(得分:4)

与VB最接近的等价物是(see this):

Convert.IsDBNull()

但是有很多方法可以做到这一点,而且大多数方法都是from here

答案 3 :(得分:3)

是的,只是语法问题。试试这个:

if (reader["usr.ursrdaystime"] != DBNull.Value)

.Equals()正在检查是否two Object instances are the same

答案 4 :(得分:2)

考虑:

if(rsData.Read()) {
  int index = rsData.GetOrdinal("columnName"); // I expect, just "ursrdaystime"
  if(rsData.IsDBNull(index)) {
     // is a null
  } else {
     // access the value via any of the rsData.Get*(index) methods
  }
} else {
  // no row returned
}

另外:您需要更多using; p

答案 5 :(得分:0)

答案 6 :(得分:0)

我经常使用String.IsNullorEmpty。它将起作用,因为当DBNull设置为.ToString时,它返回空。

if(!(String.IsNullorEmpty(rsData["usr.ursrdaystime"].toString())){
        strLevel = rsData["usr.ursrdaystime"].toString();
    }

答案 7 :(得分:0)

三元运算符应该在这里表​​现出色: 条件? first_expression:second_expression;

  

strLevel =!Convert.IsDBNull(rsData [“ usr.ursrdaystime”])? Convert.ToString(rsData [“ usr.ursrdaystime”]):null

答案 8 :(得分:-2)

首先使用ExecuteScalar

 objConn = new SqlConnection(strConnection);
 objConn.Open();
 objCmd = new SqlCommand(strSQL, objConn);
 object result = cmd.ExecuteScalar();
 if(result == null)
     strLevel = "";
 else 
     strLevel = result.ToString();