Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将项目的发票总额更新为两列之一,即IS或Business_C#_.net_Sql - Fatal编程技术网

C# 如何将项目的发票总额更新为两列之一,即IS或Business

C# 如何将项目的发票总额更新为两列之一,即IS或Business,c#,.net,sql,C#,.net,Sql,我有两张桌子: 一个是发票表,它有一个名为BusinessOrIS的查找表,以确定它是“is”还是“Business”;以及一个表示发票金额的已用列 另一个表是projects表,它有两列需要更新“TotalIsPent”和“TotalBusinessPend” 所以我想做的是取BusinessOrIS=1(is)和invoice.projectd=Projects.projectd的花费金额之和。以及BusinessOrIS=2(Business)和invoice.projectd=Proje

我有两张桌子:

一个是发票表,它有一个名为
BusinessOrIS
的查找表,以确定它是“is”还是“Business”;以及一个表示发票金额的已用列

另一个表是projects表,它有两列需要更新“TotalIsPent”和“TotalBusinessPend”

所以我想做的是取BusinessOrIS=1(is)和invoice.projectd=Projects.projectd的花费金额之和。以及BusinessOrIS=2(Business)和invoice.projectd=Projects.projectd。并将其汇总到“TotalIsPent”和“TotalBusinessPend”

//我现在看到的是InsertButton点击事件的c侧:

//进入公司

SqlConnection db = new SqlConnection("mystring")SqlTransaction transaction;
db.Open()
transaction = db.BeginTransaction();
UPDATE Projects Set ProjectSpentIS = (SELECT SUM(Invoices.Spent) 
FROM Invoices WHERE Invoices.CostToISorBusiness ='1' 
AND Projects.Projectid = Invoices.ProjectID)

UPDATE Projects Set ProjectSpentBusiness = 
(SELECT SUM(Invoices.Spent) FROM Invoices
    WHERE Invoices.CostToISorBusiness ='2' AND 
    Projects.Projectid = Invoices.ProjectID)
transaction.Commit();

我想我可能对您的模式设计有问题(因为您似乎有一个多域表,这是一个禁忌,或者至少应该为将来的扩展设置数据库)。但是,您没有发布足够的信息来重新推荐更改

但是,您应该能够将
UPDATE
重新表述为一条SQL语句:

UPDATE Projects as a 
SET ProjectSpentIS = COALESCE((SELECT SUM(b.Spent)
                               FROM Invoices as b
                               WHERE b.CostToISOrBusiness = '1'
                               AND b.ProjectId = a.ProjectId), ProjectSpentIS),
    ProjectSpentBusiness = COALESCE((SELECT SUM(b.Spent)
                                     FROM Invoices as b
                                     WHERE b.CostToISOrBusiness = '2'
                                     AND b.ProjectId = a.ProjectId), 
                                   ProjectSpentBusiness)
WHERE EXISTS (SELECT '1'
              FROM Invoices as b
              WHERE b.ProjectId = a.ProjectId
              AND b.CostToISOrBusiness in ('1', '2'))

作为一点建议,您可能希望将事务代码包装在try{}catch{}中。如果出现错误,请在catch部分执行回滚,您在哪里分配SqlCommand来执行查询。。?还将事务对象分配给sql comman对象,例如sqlcmd.transaction=transaction;确保将sqlcmd创建为sqlcmd=newsqlcommand();您是否收到错误数据?如果没有更新,你能发布你的表模式和数据片段吗?很抱歉,我正在开会,我会在明天早上再次尝试发布你要求的内容。抱歉,耽搁了!谢谢!对不起,不,不!