适当的AccessDataSource删除命令或调整?

时间:2013-08-16 07:46:47

标签: asp.net

使用AccessDataSource和ListView ,当我在浏览器中点击del时显示错误

  
    

OleDbException(0x80004005)         :无法删除或更改记录,因为表'tblOrders'包含相关记录。

  

我试图通过以下几种方式解决问题

DeleteCommand="DELETE FROM [tblCustomers] , [tblOrders] WHERE [pkeyCustomerID] = ? "

ASP生成的默认命令是

DeleteCommand="DELETE FROM [tblCustomers] WHERE (([pkeyCustomerID] = ?) OR ([pkeyCustomerID] IS NULL AND ? IS NULL)) "

我从<asp:Parameter Name="pkeyCustomerID" Type="String" />移除了<DeleteParameters> 并用所选表的参数替换它 所以外键问题不受影响 标签现在没有错误,但记录没有被删除

我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的第一个查询:

DELETE FROM [tblCustomers] , [tblOrders] WHERE [pkeyCustomerID] = ? 

语法无效,你不能同时从两个表中删除,你需要像

这样的东西
DELETE FROM [tblOrders] WHERE [pkeyCustomerID] = ?;
DELETE FROM [tblCustomers] WHERE [pkeyCustomerID] = ?;

但是我认为Access不支持多个语句。最好的解决方案是编辑此关系以使用级联删除参照操作触发器。

要做到这一点,请进入Access中的关系:

enter image description here

然后双击tblOrders和tblCustomers之间的关系,这将显示属性。然后取消选中“强制参照完整性”,或者确保选中级联参照操作选项(忽略字段名称,这是我在测试数据库中遇到的第一个关系):

enter image description here

这样可以确保在删除客户时删除所有相关订单。