【发布时间】:2020-05-01 19:35:45
【问题描述】:
各位,我正在做一个简单的捐赠项目。我需要将捐赠表的价值添加到收银员的总价值中。我做了一些测试,但不能。按照下面的代码。
private void bntAddDonation_Click(object sender, EventArgs e)
{
connection = new OleDbConnection(db);
try
{
connection.Open();
query = "UPDATE CX SET CX.Valor_Caixa = (SELECT SUM (DONATION.Valor_Contribuicao) FROM Contribuicao DONATION WHERE DONATION.Id_Caixa = CX.Id_Caixa) FROM Caixa CX";
cmd = new OleDbCommand(query, connection);
cmd.ExecuteNonQuery();
connection.Close();
MessageBox.Show("Contribuição adicionada com sucesso!");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
捕捉错误
查询表达式 '(SELECT SUM (DONATION.Valor_Contribuicao) FROM Contribuicao DONATION WHERE 中的语法错误(缺少运算符) DONATION.Id_Caixa = CX.Id_Caixa) 来自 CAIXA CX
【问题讨论】:
-
如果您在普通 SQL 编辑器中运行 DML,它是否工作?添加一些 try-catch 块并查看发生了什么(如果有)异常。与您的问题不严格相关,但为了将来证明这一点,您希望实现 iDisposable 并将您的对象实例化包装在
using语句中。此外,这正在取得进展,但除非这是一个疯狂的简单项目,否则请考虑在另一个项目中将您的数据层与您的 UI 分开。 -
我需要将捐赠的金额添加到收银台。我上传了出现的异常。
-
我在 SQL 中做了一个测试,它可以工作,但是在 OLEDB 中通过了一个异常
-
您可能知道这一点,但您的问题在于 DML...这是什么 DBMS,Oracle?
-
@Hambone:看起来它正在尝试使用引用
CX别名的非常时髦的嵌套查询,使用来自所有子Contribuicao记录的Valor_Contribuicao总和来更新每个Caixa记录.听起来对吗? DROPE:我要重申,存储一个总和很少合适,因为它可能会过时。关系数据库的好处之一是您可以即时计算衍生值,因此它们永远不会过时。
标签: c# sql visual-studio ms-access oledb