0

我正在尝试从 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());
            }

**注意:**当我使用此代码时,SELECTDELETE可以工作。

4

2 回答 2

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 以让您了解我将如何做。

于 2012-05-15T13:59:24.743 回答
0

我猜想级联删除可能已经打开了。仅从查询中的主表中删除或关闭数据库中的级联。

于 2012-05-15T13:47:54.140 回答