成功删除记录时,ExecuteNonQuery返回值0
本文关键字:ExecuteNonQuery 返回值 删除 记录 成功 | 更新日期: 2023-09-27 18:26:11
在从sql server中删除一行时,我在Asp.net中的C#代码中出现了一个小问题。我正在使用ExecuteNonQuery来确定向页面呈现的消息。如果ExecuteNonQuery返回1,则我显示成功消息。我陷入困境的地方是,我有相同的逻辑来添加记录和更新记录,并且我的代码运行良好。请参阅下面的代码。
private void Delete_row(string ImageId)
{
string sSQL = "delete FROM dbo.Image_library_UK_temp where Image_id=" + ImageId;
using (SqlConnection dbConnection = new SqlConnection(app_settings.sql_conn_string_db))
{
try
{
//delete the row from db
dbConnection.Open();
SqlCommand command = new SqlCommand(sSQL, dbConnection);
command.CommandType = CommandType.Text;
command.CommandTimeout = 1024;
command.ExecuteNonQuery();
int rowsAffected = command.ExecuteNonQuery();
if (rowsAffected == 1)
{
messagepanel1.ShowSuccessMessage("The image " + txtImgTitle.Text + "has been deleted from the system.");
DisableValidation();
}
}
catch (Exception ex)
{
messagepanel1.ShowErrorMessage("Error: Deletion unsuccessful");
}
Session.RemoveAll();
generateTable(false);
}
}
当前受影响的行返回0。这是一个简单的SQL语句,所以我的SQL是用C#硬编码的,我没有使用存储过程。
你知道我该怎么做吗?
您正在执行该命令两次。
command.ExecuteNonQuery();
int rowsAffected = command.ExecuteNonQuery();
第一行将删除该行并返回1,但您忽略了返回值。第二行将再次执行DELETE
语句,但不会删除任何内容,因为不再有满足给定条件的行;因此rowsAffected
将为零。
此外,您的代码容易受到sql注入的攻击,正如在评论中已经提到的那样。请考虑使用准备好的语句。