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

nic*_*wdy 13 c# sql asp.net sql-server-2008

从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);

        }
    }
Run Code Online (Sandbox Code Playgroud)

受影响的行当前返回0.这是一个简单的SQL语句,因此我的sql在C#中进行了硬编码,而我没有使用存储过程.

我有什么想法可以使这项工作?

pen*_*tur 37

你正在执行两次命令.

command.ExecuteNonQuery();
int rowsAffected = command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

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

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