成功删除记录时,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#硬编码的,我没有使用存储过程。

你知道我该怎么做吗?

成功删除记录时,ExecuteNonQuery返回值0

您正在执行该命令两次。

command.ExecuteNonQuery();
int rowsAffected = command.ExecuteNonQuery();

第一行将删除该行并返回1,但您忽略了返回值。第二行将再次执行DELETE语句,但不会删除任何内容,因为不再有满足给定条件的行;因此rowsAffected将为零。

此外,您的代码容易受到sql注入的攻击,正如在评论中已经提到的那样。请考虑使用准备好的语句。