在asp.net中使用ExecuteScalar函数时遇到问题

时间:2013-07-25 14:41:07

标签: c# asp.net

我试图通过检查后端表是否将其中一列设置为“NO”来使用ExecuteScalar函数。如果其中一列设置为NO,那么我想调用SendEmail函数,否则我想调用Delete_Record函数。我的问题是它始终调用Delete_Record函数,并且从不调用SendEmail函数。 Post_ID的数据类型是varchar,我不知道这是否与此有关;我似乎无法弄清楚发生了什么。有人可以帮忙吗? 这是我的代码:

SqlCommand cmd = new SqlCommand("SELECT count(*) from MyTable WHERE Post_ID =@Post_ID And (Column1='No' OR Column2='No' OR Column3='No')", con);
    cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = Post_ID;
    cmd.Connection = con;
    con.Open();
    Int32 result = (int)cmd.ExecuteScalar();

    if (result == 1)
    {
        SendEmail();
    }
      else
     {
       Delete_Record();
     }

3 个答案:

答案 0 :(得分:2)

由于它可能不止一个,您应该将条件更改为

    if (result >= 1)
    {
        SendEmail();
    }
      else
     {
       Delete_Record();
     }

答案 1 :(得分:1)

正如其他人所说,你可以获得超过1条记录。使用“if(result> = 1)”或尝试

从MyTable选择 1 WHERE Post_ID = @ Post_ID And(Column1 ='No'或Column2 ='No'或Column3 ='No')“

答案 2 :(得分:0)

试试这个。肯定会有效。

SqlCommand cmd = new SqlCommand("SELECT count(*) from MyTable WHERE Post_ID =@Post_ID And (Column1='No' OR Column2='No' OR Column3='No')", con);
    cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = Post_ID;
    cmd.Connection = con;
    con.Open();
    SqlDataReader rd=cmd.ExecuteReader()

    if (rd.Read())
    {
        SendEmail();
    }
      else
     {
       Delete_Record();
     }