我想从数据库中删除数据,但在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";
}
答案 0 :(得分:2)
您使用了错误的方法来执行存储过程。在您的情况下,正确的是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);
答案 1 :(得分:1)
我认为您正在尝试检查阅读器是否包含记录。如果是这样,您可以使用如下代码完全填写此内容:
rdr = cmd.ExecuteReader();
if(rdr.HasRows)
{
//execute the statements;
}
else
{
Lblmsg.Text =- "Record doesn't exist";
}
答案 2 :(得分:0)
您似乎在存储过程中运行删除命令。在这种情况下,您不想使用ExecuteReader,而是使用ExecuteNonQuery。这将返回受影响的行数,如果它等于1,则表示您删除了1行。
根据您要使用的存储过程ExecuteScalar。阅读它,看看你的想法。
我假设你清理了用户输入并且有代码来验证文本框的值是一个数字吗?