使用AND关键字从我的数据库中删除一行

时间:2012-10-27 01:27:15

标签: c# sql visual-studio

所以我想从列表框中删除一行,这是用户按下删除的地方,程序应该这样做。唯一的问题是它没有。如果我只是删除第一个名称,它将正常工作,我的数据库更新,但当我尝试同时使用名字和姓氏时,它不起作用。有人可以帮帮我吗。我是新手,这是为了学校的任务。非常感谢你。

干杯

SqlConnection cn;
        cn = new SqlConnection();
        cn.ConnectionString = "Data source=(local); Initial Catalog=INT422Assignment1;Integrated Security=SSPI;";
        cn.Open();
        SqlCommand cmd;
        cmd = new SqlCommand();
        cmd.Connection = cn;
        cmd.CommandText = "DELETE FROM myTable WHERE firstName=@firstName AND lastName=@lastName";


        SqlParameter param;
        param = new SqlParameter("@firstName", SqlDbType.VarChar);
        param.Direction = ParameterDirection.Input;
        param.Value = firstNameDelete.Text;
        cmd.Parameters.Add(param);

        param = new SqlParameter("@lastName", SqlDbType.VarChar);
        param.Direction = ParameterDirection.Input;
        param.Value = lastNameDelete.Text;
        cmd.Parameters.Add(param);


        cmd.ExecuteNonQuery();

        cn.Close();




        MessageBox.Show("Deleted");
        this.Close();

4 个答案:

答案 0 :(得分:0)

我认为你从一开始就采用了错误的方法。假设你有两个约翰斯,约翰史密斯和约翰多伊。如果您的查询是:

DELETE FROM myTable WHERE FirstName="John";

这意味着所有以“John”作为名字的条目将被删除,两者都是Johns。

如果你有:

DELETE FROM myTable WHERE FirstName="John" AND LastName="Doe";

然后在理论上John Doe将被删除。再说一次,如果你有一个以上的John Doe怎么办?你想把它们全部删掉吗?

如果您想删除单个条目,您想要的是根据列表中包含唯一ID的隐藏列进行删除,或者更好的方法是将列表框绑定到您的表格。

答案 1 :(得分:0)

尝试使用此查询并检查较低或较高的Case Char

  

DELETE FROM myTable WHERE Upper(FirstName)= Upper(@ firstName)AND Upper(LastName)= Upper(" @ LastName");

或者你可以使用Like not =如果你不搜索确切的单词

您可以检查执行中受影响的行

  

int numberOfRecords = cmd.ExecuteNonQuery();

答案 2 :(得分:0)

该代码没有任何固有的“错误”。然而(并且主要是对评论的回顾):

  1. 确保输入值符合预期 1 并验证命令是否在SSMS或类似的交互式SQL客户端 2 中运行(具有预期值)。 / p>

  2. 确保套管/间距正确。如果这很重要取决于特定列的COLLATION设置。再次,尝试SSMS或类似工具的命令将显示这是否有效。

  3. 检查ExecuteNonQuery的结果是否有“更改的记录数”。如果DELETE成功,则应为1。事务范围可能会出现问题,因此这个值非常重要。虽然如果仅使用名字“工作正常”这是不太可能的,但这是一个很好的检查。


  4. 1 使用Visual Studio调试器检查绑定到参数时的值。

    2 交易可用于避免在这些测试中“真正删除”。或者,DELETE可以更改为SELECT,因为它对实际查询(WHERE .. AND)逻辑没有影响。

答案 3 :(得分:0)

对于迟到的回复,对不起。所以基本上这就是我做错了:在我的主要形式中,当我填充我的列表框时,这就是我使用的:

s = reader["firstName"].ToString() + "-" + reader["lastName"].ToString(); studentInfoListBox.Items.Add(s); } 

并在deleteItem表单中,我执行了以下操作:

string[] b = curItem.Split('-'); firstNameDelete.Text = b[0].ToString(); lastNameDelete.Text = b[1].ToString(); 

所以我在主要表单部分“ - ”

中添加了一个额外的空格