C# ExecuteReader能否在C中的if条件下工作#
我想从数据库中删除数据,但在C#asp.net中执行C# ExecuteReader能否在C中的if条件下工作#,c#,asp.net,C#,Asp.net,我想从数据库中删除数据,但在C#asp.net中执行ExecuteReader之前,我想检查数据是否存在 我想这样工作,如果有任何可能的解决办法,请帮助 SqlCommand cmd = new SqlCommand("spDelete", scon); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@id", TextBox6.Text.ToString()); scon.Open();
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";
}
我想你是在检查阅读器是否包含记录。如果是这样的话,您可以使用如下代码来完全填充:
rdr = cmd.ExecuteReader();
if(rdr.HasRows)
{
//execute the statements;
}
else
{
Lblmsg.Text =- "Record doesn't exist";
}
您似乎正在存储过程中运行delete命令。在这种情况下,您不想使用ExecuteReader,但是。这将返回生效的行数,如果它等于1,则表示您删除了1行 根据要使用的存储过程而定。仔细阅读,看看你是怎么想的
我假设您清理了用户输入,并使用代码验证文本框值是否为数字?您使用了错误的方法来执行存储过程。在您的情况下,正确的方法是返回受命令影响的记录数。如果存储过程删除该记录,则返回值将不为零,否则(没有与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是一个整型数据类型的字段,那么您应该写入
cmd.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(TextBox6.Text);
如果添加存储过程的代码,您可能会更清楚。
Create proc spDelete@id int as Begin Delete from employees,其中id=@id end
@Steve存储过程代替调用ExecuteReader,调用ExecuteOnQuery并获取返回值。如果为零,则没有要删除的记录。文本框模式设置为数字。该模式不起作用。读卡器执行后,它从不检查编码是否正确