C# C语言中的sqldelete语句#

C# C语言中的sqldelete语句#,c#,C#,我只是请求帮助。。它不会删除该行。但是我没有遇到任何错误。。请帮帮我,我的代码是: private void btndelete_Click(object sender, EventArgs e) { if (txtprn.Text == "" || txtdescription.Text == "") { MessageBox.Show("No selected file to be delete!",

我只是请求帮助。。它不会删除该行。但是我没有遇到任何错误。。请帮帮我,我的代码是:

private void btndelete_Click(object sender, EventArgs e)
    {
        if (txtprn.Text == "" || txtdescription.Text == "")
        {
            MessageBox.Show("No selected file to be delete!", 
                            "Delete Data", 
                             MessageBoxButtons.OKCancel,  
                             MessageBoxIcon.Warning);
        }
        else
        {
            DialogResult answer;
            answer = MessageBox.Show("Are you sure you want to delete this record?", 
                                     "Delete Record",
                                      MessageBoxButtons.YesNo,
                                      MessageBoxIcon.Question, 
                                      MessageBoxDefaultButton.Button2);

            if (answer == DialogResult.Yes)
            {
                con.Open();
                com.CommandText = 
                   @"DELETE 
                       FROM tblsupply 
                      WHERE (prnumber = @prnumber AND         
                             description = @description)";

                com.Parameters.Clear();
                com.Parameters.AddWithValue("@prnumber", txtprn.Text);
                com.Parameters.AddWithValue("@description", txtdescription.Text);
                com.ExecuteNonQuery();
                MessageBox.Show("Record Deleted!");
                con.Close();
            }
            ClearFields();
            GridRefresh();
        }
    }

放置此尝试捕捉,以便您知道错误

 try
    {
    DialogResult answer;
                answer = MessageBox.Show("Are you sure you want to delete this record?", "Delete Record", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

                if (answer == DialogResult.Yes)
                {
                    con.Open();
                    com.CommandText = "DELETE FROM tblsupply WHERE (prnumber=@prnumber AND description=@description)";
                    com.Parameters.Clear();
                    com.Parameters.AddWithValue("@prnumber", txtprn.Text);
                    com.Parameters.AddWithValue("@description", txtdescription.Text);
                    com.ExecuteNonQuery();
                    MessageBox.Show("Record Deleted!");
                    con.Close();
                }
                ClearFields();
                GridRefresh();
    }
    catch(Exception ex)
    {
      ex.Message.ToString();
    }

检查输出值。如果返回正数,则表示已成功删除多条记录。如果得到-1,则会发生回滚,返回值也是-1

将txtprn转换为int,因为它看起来像一个数字,并且作为字符串传递

com.Parameters.AddWithValue("@prnumber", Convert.ToInt32(txtprn.Text));
com.Parameters.AddWithValue("@description", txtdescription.Text);
var numberOfRowsAffected = com.ExecuteNonQuery();
MessageBox.Show("Record Deleted!"+numberOfRowsAffected );

我建议不要根据用户输入删除记录。在您的情况下,您应该有一个用户无法编辑的标识符,甚至您的应用程序在幕后管理的更隐藏的值。 情景:

  • 用户正在添加新记录(通过GUI)
  • 用户正在保存,应用程序应为其创建新id。应用程序
  • 加载保存的记录后,应用程序也将检索id并将其保存在场景后面的某个位置
  • 一旦删除记录(通过GUI),删除将根据id完成,而不是通过文本框中的值

  • 在当前状态下,请注意,如果是空格,则删除可能无法成功,因此您无法依赖这些文本进行删除。

    引发任何异常?请检查输出值。如果它返回一个正数,那么许多记录将被删除。如果得到-1,则在sql server上发生回滚<代码>变量输出=com.ExecuteNonQuery()ExecuteNonQuery调用的返回值是多少。它应该是受影响的行数(在本例中已删除)如果您一步一步地运行代码,它是否正在执行sql命令?您在哪里声明和实例化con和com对象?我们可以看看那个密码吗?您是否检查了运行时生成的CommandText,并尝试直接在SQL Server中执行该命令?请小心使用AddWithValue。您现在将
    @prnumber
    参数声明为某种字符类型-这就是您需要的吗?他说没有错误,所以我假设它不会捕获任何内容。这不是答案。是的,将执行查询,但在转换过程中,查询背后有一个错误。。所以这个答案可能只是一个建议,可能会帮助他解决这个问题,但我理解反对票。