ai didi

c# - 查询以 int 数据类型对 Access 数据库中的字段求和

转载 作者:行者123 更新时间:2023-11-30 17:29:06 24 4
gpt4 key购买 nike

有一个名为qty 的字段。我想对具有相同发票号的多行求和。

String sql = "select sum(qty) from pur_invo_tran where invo_no='"+dataGridView1.Rows[i].Cells[1].Value+"' and doi=#"+Convert.ToDateTime(dataGridView1.Rows[i].Cells[0].Value.ToString())+"#";

OleDbConnection con = new OleDbConnection();
con.ConnectionString = constr;
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataReader Reader = null;

try
{
con.Open();
int b = (int)cmd.ExecuteScalar();

dataGridView1.Rows[i].Cells[2].Value = b.ToString("## ## ## ###.##").Trim().Replace(" ", ",");
con.Close();
}
catch (Exception ee)
{
MessageBox.Show("Error..." + ee.Message);
}

最佳答案

解决方案:将ExecuteNonQuery 更改为ExecuteScalar 以将总和放入b。如果 qty 不是 int,您可能需要更改 b 的类型(以及分配它时的转换)以使用该类型。

说明: ExecuteNonQuery 用于 INSERT、UPDATE 和 DELETE 之类的操作:因此是“非查询”。 SELECT 通常与 ExecuteReader 一起使用,但有一种特殊情况,您只需要第一行的第一个值:ExecuteScalar,这在这种情况下很有意义,因为您将所有一组值加总成一个总数。

其他提示...

  1. OleDbConnection、OleDbCommand 和 OleDbDataReader(未使用,但在我提出这一点时...)都是 IDisposable,因此每个都应该在 using block 中.完成后,您无需在连接上调用 Close,因为隐式 Dispose 将为您调用 Close。
  2. 您的代码容易受到 SQL 注入(inject)攻击(SamIAm 在评论中指出了这一点)。通过避免字符串连接来创建查询来避免这种情况:使用 SQL 参数。
  3. b.ToString("## ## ## ###.##").Trim().Replace("", ","); Trim 是多余的,因为您刚刚指定了格式,并且它不会以空格开头或结尾。与其执行 Replace,不如首先通过在格式字符串中放置逗号而不是空格来正确格式化它。或者更进一步,考虑使用 standard format string N2 或什至 C2(因为它是货币金额),这将为应用程序的当前区域性使用标准数字或货币格式。

关于c# - 查询以 int 数据类型对 Access 数据库中的字段求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793343/

24 4 0
文章推荐: c# - 动态添加行到表格布局面板
文章推荐: c# - 在 ASP.NET Web 应用程序之外获取 UserManager 实例?
文章推荐: c# - 为什么我的 WCF 服务一次只处理 3 个并行请求?
文章推荐: c++ - Windows : How to protect process from getting killed in C/C++
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com