使用文本框输入从.mdb中删除

时间:2014-06-04 06:11:16

标签: c# sql visual-studio-2010

我删除的内容与

相同
  

没有给出一个或多个参数的值

我实际上不知道修复此问题的代码。

这就是我的主题:

private void btnDelete_Click(object sender, EventArgs e)
{
      try
      {
          string FirstName = txtFirstName.Text;
          sql = " DELETE FROM Club_Member WHERE FirstName = @FirstName; ";
          dbCmd = new OleDbCommand(sql, dbConn);

          // Execute query
          dbCmd.ExecuteNonQuery();
       }
       catch (System.Exception exc)
       {
           MessageBox.Show(exc.Message);
           return;
       }

3 个答案:

答案 0 :(得分:1)

不是很明显吗?

您在@FirstName中声明了SqlCommand参数,但您从不添加值作为参数。

dbCmd = new OleDbCommand(sql, dbConn);
dbCmd.Parameters.AddWithValue("@FirstName", FirstName);

还可以使用using statement来处置您的OleDbConnectionOleDbCommand

using(OleDbConnection dbConn = new OleDbConnection(ConnString))
using(OleDbCommand dbCmd = dbConn.CreateCommand())
{
   dbCmd.CommandText = "DELETE FROM Club_Member WHERE FirstName = @FirstName";
   dbCmd.Parameters.AddWithValue("@FirstName", FirstName);
   dbConn.Open();
   dbCmd.ExecuteNonQuery();
}

我总是倾向于使用Add方法而不是AddWithValue,因为AddWithValue方法发送nvarchar类型,因为它是字符串变量。但在某些情况下,你并不想要这个。您也想声明SqlDbType

例如,如果您使用varchar列并使用AddWithValue方法,则ADO.NET会将其作为nvarchar值发送,这可能会导致潜在的信息丢失。 (例如,对于非拉丁字符)

答案 1 :(得分:1)

 private void btnDelete_Click(object sender, EventArgs e)
 {

  try
  {

    string FirstName = txtFirstName.Text;

    sql = " DELETE FROM Club_Member WHERE FirstName = @FirstName; ";
    dbCmd = new OleDbCommand(sql, dbConn);

     dbCmd .Parameters.Add(new OleDbParameter("@FirstName",FirstName ));
    // Execute query
    dbCmd.ExecuteNonQuery();
}
catch (System.Exception exc)
{
    MessageBox.Show(exc.Message);
    return;
}

答案 2 :(得分:0)

这主要是因为拼写错误的值或者在输入或添加时将任何值留空。因此,数据库会将其与参数混淆。调试或只是检查拼写。 顺便说一下,我想知道您为Club_Member使用的主键是什么?