我正在尝试从tblOrderAA中删除多行,从tblProInfo中删除一行:(查看图片)
这是代码。我得到的错误是:
“记录已被删除”
private void DeleteFromDataBase()
{
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
OleDbConnection myConnection = new OleDbConnection(connectionString);
string myDeleteQuery ="DELETE tblOrderAA.*, tblProInfo.*"+
" FROM tblProInfo INNER JOIN tblOrderAA ON tblProInfo.proInfoSerialNum = tblOrderAA.orderAASerialPro" +
" WHERE (((tblProInfo.proInfoScienceName)='"+comboBox1.SelectedItem.ToString()+"'))";
OleDbCommand myCommand = new OleDbCommand(myDeleteQuery);
myCommand.Connection = myConnection;
try
{
myConnection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
MessageBox.Show("success");
}
catch (Exception e)
{
MessageBox.Show("error in : \n" + e.ToString());
}
**注意:**当我将此代码与SELECT
代替DELETE
时,它可以使用。
答案 0 :(得分:1)
您无法使用我知道的一个查询从多个表中删除。如果启用了级联删除,则只需从Product表中删除,订单记录将自动删除。如果没有,我的建议是运行以下查询以获取外键并从每个表中删除:
"SELECT proInfoSerialNum "+
" FROM tblProInfo " +
" WHERE (((tblProInfo.proInfoScienceName)='"+comboBox1.SelectedItem.ToString()+"'))"
(将结果存储在变量中,比如serialNum
)
// delete the order records first so they are not orphaned
"DELETE tblOrderAA.* "+
" FROM tblOrderAA " +
" WHERE (((tblOrderAA.orderAASerialPro)='"+serialNum.ToString()+"'))"
// Delete the product info
"DELETE tblProInfo.*"+
" FROM tblProInfo " +
" WHERE (((tblProInfo.proInfoSerialNum )='"+serialNum.ToString()+"'))"
请注意,我正在遗漏实际的C#代码来运行这些查询,只是给你一个SQL,让你知道我将如何做。
答案 1 :(得分:0)
我猜想级联删除可能已经开启了。 仅从查询中的主表中删除或关闭数据库中的级联。