1

我试图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();
     }
4

3 回答 3

2

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

    if (result >= 1)
    {
        SendEmail();
    }
      else
     {
       Delete_Record();
     }
于 2013-07-25T15:02:32.230 回答
1

正如其他人所说,您可以获得超过 1 条记录。要么使用“如果(结果> = 1)”或尝试

“从 MyTable 中选择1,其中 Post_ID =@Post_ID 并且(Column1='No' OR Column2='No' OR Column3='No')”

于 2013-07-25T15:10:22.493 回答
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();
     }
于 2013-07-25T15:20:17.080 回答