C# 删除多个表中的多行
我在SQL数据库中有3个表:C# 删除多个表中的多行,c#,html,sql,database,C#,Html,Sql,Database,我在SQL数据库中有3个表: 动物状态 动物 推车 我希望能够删除动物和动物状态表中基于购物车的几个项目 所有表之间相同的是AnimalID,它是所有表中的主键,基于此,我应该删除它们。但同时,我需要为有特定电子邮件的人删除它 例如,如果我有人发电子邮件123@gmail.com这个人的车里有两个动物,一个ID为123,另一个ID为456 我需要从其他两个表中删除这两个特定的动物 我知道如何为一张桌子做这件事,但当我有几张桌子相互依赖时就不行了,这取决于具体的电子邮件,而购物车中还有其他电子邮件
x= AnimalStatus.Delete(AdoptCart.GetAnimalId(Session["email"].ToString()).ToString());
if (x > 0)
{
x = Animal.Delete(AdoptCart.GetAnimalId(Session["email"].ToString()).ToString());
if (x > 0)
{
AdoptCart.RemoveAllbyEmail(Session["email"].ToString());
以下是所有删除代码的工作顺序:
根据动物ID删除动物状态:
static public int Delete(string id)
{
int rowsAffected;
string strSql = string.Format("delete from AnimalStatus where AnimalID='" + id + "'");
rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
return rowsAffected;
}
根据动物ID从动物表中删除动物:
static public int Delete(string id)
{
int rowsAffected;
string strSql = string.Format("delete from Animal where AnimalID='" + id + "'");
rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
return rowsAffected;
}
从购物车表中删除所有动物:
static public int Remove(string AnimalID)
{
int rowsAffected;
string strSql = string.Format("delete from Cart where AnimalID='" + AnimalID + "'");
rowsAffected = (int)dataservice.ExecuteNonQuery(strSql);
return rowsAffected;
}
这个代码的问题是,所有这些只删除了一只动物,我需要删除几只。
我曾尝试创建这样一个语句,但没有成功
Delete Animal.*, AnimalStatus.*
FROM Animal INNER JOIN
AnimalStatus ON Animal.AnimalID = AnimalStatus.AnimalID INNER JOIN
Cart ON Animal.AnimalID = Cart.AnimalID
WHERE (Cart.UserEmail = N'Email')
根据我用文字给出的示例,应该删除的部分在//removed
中标记如下
Cart Table
| AnimalID | Email_Addr |
--------------------------------------
| 123 | 123@gmail.com | //removed
| 456 | 123@gmail.com | //removed
| 765 | jj@gmail.com |
| 343 | bb@gmail.com |
| 256 | cc@gmail.com |
Animal Status Table
| AnimalID | Vaccinated |
--------------------------------------
| 123 | Yes | //removed
| 456 | Yes | //removed
| 765 | No |
| 343 | No |
| 256 | No |
Animals Tables
| AnimalID | Age |
--------------------------------------
| 123 | 3 | //removed
| 456 | 4 | //removed
| 765 | 3 |
| 343 | 7 |
| 256 | 10|
看看你目前的工作,你可以做几件事。您可以像您所要求的那样重写查询逻辑,但我在您的示例中没有看到主键/外键关系。因此,cascade无法处理当前的表设置方式。这是一篇关于级联删除的好文章 所以,如果你不想重写所有东西,你可以在你的C代码中完成所有这些。你所要做的就是在购物车表中循环,并获取所有包含电子邮件的id“123@gmail.com“并调用您的三个delete语句。您只需要编写一个方法来获取id,并调用delete方法,直到id变量为空
这取决于您希望所有逻辑存在于哪里,在sql中还是在C#代码中。如果您使用的是实体框架,无论是代码优先还是数据库优先,您都可以选择使用LINQ查询语法或扩展方法。这实际上取决于偏好。样本数据和期望的结果将非常有用。请展示您尝试的内容,以便我们对其进行评论或改进。还要注意的是,堆栈溢出不是“为我编写代码”服务。最后,哪个数据库管理系统:Oracle?Sql Server?MySql?etc etc在显示表的图片时对数据进行采样?您是否考虑了引用完整性(即带有级联删除的“外键”)?