我有一个应用程序需要从表Client
public void Delete_Client(int _id_client)
{
Data.Connect();
using (Data.connexion)
{
string s = "Delete From CLIENT where id_client = " + _id_client;
SqlCommand command = new SqlCommand(s, Data.connexion);
try
{
command.ExecuteNonQuery();
}
catch { }
}
}
表Client
包含对另一个表的外部引用。因此,出现异常表示删除必须是级联。
那么如何更改我的代码来执行此操作(我使用sql server作为dbms)?
答案 0 :(得分:1)
IMO你应该避免使用on delete cascade
因为:
所以我们改变你的查询。我添加了ClientOrder
作为示例表,其中包含对我们即将被删除的客户端的外键引用。
首先,我删除链接到客户端的所有订单,然后删除客户端本身。对于所有其他表格,这应该是这样的
与Client
表链接的链接。
public void Delete_Client(int _id_client)
{
Data.Connect();
using (Data.connexion)
{
string query = "delete from ClientOrder where id_client = @clientId; delete From CLIENT where id_client = @clientid";
SqlCommand command = new SqlCommand(query, Data.connexion);
command.Parameters.AddWithValue("@clientId", _id_client);
try
{
command.ExecuteNonQuery();
}
catch { } //silencing errors is wrong, if something goes wrong you should handle it
}
}
参数化查询有许多优点。首先它更安全(看看SQL注入攻击)。第二种类型是通过框架解决的(特别有助于格式化DateTime
。