我正在尝试添加将从访问db文件中的2个表中删除的代码。有时其中一个会起作用而另一个不会当我以另一种方式尝试它会做相反的事情。所以最终只有2个作品中的一个。
这是我的代码,我希望有人能发现我做错了。
try
{
Conn.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = Conn;
command.CommandText = "DELETE FROM TBLNAME WHERE name =@name";
command.Parameters.AddWithValue("@name", lvlist.SelectedItems[0].Text);
command.ExecuteNonQuery();
command.CommandText = "DELETE from TBLNAME WHERE cb_listName =@listname";
command.Parameters.AddWithValue("@listname", lvlist.SelectedItems[0].Text);
command.ExecuteNonQuery();
Conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error " + ex);
}
答案 0 :(得分:3)
您应该使用不同的Command实例,每个命令要执行一个命令。如果不这样做,则需要清除参数。这是因为OleDb查询中的参数是位置的而不是命名的。这意味着当您在第二个查询中添加第二个参数时,将使用第一个参数,因为它是列表中的第一个参数。
using(var connection = new OleDbConnection("connection string here"))
{
connection.Open();
using(var command = new OleDbCommand("DELETE FROM TBLNAME WHERE name = @name", connection))
{
cmd.Parameters.Add(new OleDbParameter("@name", OleDbType.VarChar, 50)).Value = lvlist.SelectedItems[0].Text;
command.ExecuteNonQuery();
}
using(var command = new OleDbCommand("DELETE from TBLNAME WHERE cb_listName = @listname", connection))
{
cmd.Parameters.Add(new OleDbParameter("@listname", OleDbType.VarChar, 50)).Value = lvlist.SelectedItems[0].Text;
command.ExecuteNonQuery();
}
}
你也应该:
using
块确保连接在使用后关闭。不要尝试创建类范围的,甚至更糟的全局连接实例。AddwithValue
。 最后,只是关于一般最佳做法的说明,不要添加对该例外无用的catch
块。至少记录类型,消息和堆栈跟踪,然后对属性InnerException
中找到的每个内部异常以递归方式重复此操作。这些有用的信息可以帮助您确定异常发生的确切原因。
答案 1 :(得分:1)
使用两个不同的OleDbCommand对象。