【问题标题】:C# SqlReader issueC# SqlReader 问题
【发布时间】:2013-09-13 09:39:57
【问题描述】:

我是第一次在这个论坛上发帖。我真的希望我能找到一些帮助。 我正在做的是从 SQL 加载大约 ... 1000 值(示例),我做得很好。

例如查询是:Select Value from DatabaseA.dbo.Values

那个“值”==>十进制(10, 2)

sqlConnection2.Open();
insertCommand2.ExecuteNonQuery();
SqlDataReader reader2 = insertCommand2.ExecuteReader();
if (reader2.HasRows)
{
  while (reader2.Read())
  {
    decimal Value = reader.GetDecimal(0);

这应该可以正常工作。但我想做的是在所有这些上做+ ... 例如第一个值 = 16,第二个 = 28,第三个:78

我想制作 16 + 28 + 78 ...但对于加载它们的所有值。 请问我该怎么做? , 谢谢 。

【问题讨论】:

  • 代码没有意义。您向我们展示了SELECT 查询,但您使用的是ExecuteNonQuery,然后您在同一命令上使用ExecuteReader 来获取SqlDataReader reader2,但您稍后使用的是reader,但您没有显示完全没有。
  • 您是说要总和还是总和?即,如果行是10/12/10,你想要32 还是10/22/32

标签: c# sql .net sql-server list


【解决方案1】:

假设您也想保留原始值,您可以有一个List<decimal> 并累积总数。

List<decimal> totals = new List<decimal>();

然后在你的while循环中:

totals.Add(Value);

然后您可以通过以下方式返回运行总计:

var runningTotal = totals.Sum();

如果你不想要原始值,你可以使用:

 decimal value;
 while (reader2.Read())
 {
    value += reader.GetDecimal(0);
 }

【讨论】:

    【解决方案2】:

    只需将您的变量放在循环之外并使用+= operator

    decimal Value = 0;
    sqlConnection2.Open();
    insertCommand2.ExecuteNonQuery();
    SqlDataReader reader2 = insertCommand2.ExecuteReader();
    
    if (reader2.HasRows)
    {
        while (reader2.Read())
        {
           Value += reader.GetDecimal(0);
        }
    }
    

    【讨论】:

      【解决方案3】:

      把sql改成

      Select Sum(Value) from DatabaseA.dbo.Values
      

      然后

      decimal Value = (decimal)insertCommand2.ExecuteScalar(); 
      

      【讨论】:

        【解决方案4】:

        您可以使用 SQL SUM 函数。看看http://technet.microsoft.com/en-us/library/ms187810.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-11
          • 1970-01-01
          • 2016-10-07
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多