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";
}
您正在使用错误的方法来执行存储过程。在您的示例中,正确的是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。仔细阅读,看看你的看法。
我假设您对用户输入进行了消毒,并且有代码来验证文本框值是一个数字?