c#中的ExecuteReader可以在if条件下工作吗?

本文关键字:条件下 工作 if 中的 ExecuteReader | 更新日期: 2023-09-27 18:07:15

我想从数据库中删除数据,但在c# asp.net中执行ExecuteReader之前,我想检查数据是否存在。

我想这样工作,如果有任何可能的解决方案请帮助。

SqlCommand cmd = new SqlCommand("spDelete", scon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", TextBox6.Text.ToString());
scon.Open();
//want to check here before execution. is this possible?
if(cmd.ExecuteReader() == TextBox1.Text)
{
    // then execution
    rdr = cmd.ExecuteReader();
}
else 
{
    Lblmsg.Text =- "Record doesn't exist";
}

c#中的ExecuteReader可以在if条件下工作吗?

您正在使用错误的方法来执行存储过程。在您的示例中,正确的是ExecuteNonQuery,它返回受命令影响的记录数。如果存储过程删除了记录,则返回值将不为零,否则(没有与ID参数匹配的记录)返回值将为零

using(SqlCommand cmd = new SqlCommand("spDelete", scon))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@id", TextBox6.Text);
    scon.Open();
    int numRecordsDeleted = scon.ExecuteNonQuery();
    if(numRecordsDeleted == 0)
        Lblmsg.Text = "Record doesn't exist";
    else
        Lblmsg.Text = "Record deleted";
}

最后,您确定您的ID字段是字符串吗?使用AddWithValue传递参数是危险的,您应该始终指定正确的数据类型。例如,如果ID是一个Integer数据类型的字段,那么你应该写

cmd.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(TextBox6.Text);

我想你是想检查阅读器是否包含记录。如果是这样,您可以使用以下代码填充它:

rdr = cmd.ExecuteReader();
if(rdr.HasRows)
    {
      //execute the statements;             
    }
    else 
    {
       Lblmsg.Text =- "Record doesn't exist";
    }

看起来您正在一个存储过程中运行一个删除命令。在这种情况下,您不希望使用ExecuteReader,而是使用ExecuteNonQuery。这将返回受影响的行数,如果它等于1,那么您知道您删除了1行。

根据您的存储过程,您想要使用ExecuteScalar。仔细阅读,看看你的看法。

我假设您对用户输入进行了消毒,并且有代码来验证文本框值是一个数字?