使用SQL和C#从不同的表中删除行

时间:2012-05-15 13:34:11

标签: c# sql oledb

我正在尝试从tblOrderAA中删除多行,从tblProInfo中删除一行:(查看图片)enter image description here

这是代码。我得到的错误是:

  

“记录已被删除”

        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时,它可以使用。

2 个答案:

答案 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)

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