DBNull if语句

Pip*_*Boy 54 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();

        }
Run Code Online (Sandbox Code Playgroud)

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

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

如果不是IsDBNull(rsData("usr.ursrdaystime"))

任何帮助,将不胜感激!

Kam*_*ach 100

这应该工作.

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

还需要添加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();
                 }
              }
           }
        }
     }
Run Code Online (Sandbox Code Playgroud)

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


jas*_*son 10

惯用的方式是说:

if(rsData["usr.ursrdaystime"] != DBNull.Value) {
    strLevel = rsData["usr.ursrdaystime"].ToString();
}
Run Code Online (Sandbox Code Playgroud)

这个:

rsData = objCmd.ExecuteReader();
rsData.Read();
Run Code Online (Sandbox Code Playgroud)

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


Cad*_*oux 7

与您的 VB 最接近的等价物是(请参阅此):

Convert.IsDBNull()
Run Code Online (Sandbox Code Playgroud)

但是有很多方法可以做到这一点,大多数都从这里链接


mgn*_*nan 5

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

if (reader["usr.ursrdaystime"] != DBNull.Value)
Run Code Online (Sandbox Code Playgroud)

.Equals()正在检查两个 Object 实例是否相同