3

我需要计算一列的总和并将其显示在total.Text. 我怎样才能做到这一点?此列有无限的数据,可以随时更改。我正在使用VS2010。我是 C# 的新手。

例子:

_____________________
| last_retail_price |
---------------------
|      500          |
|      200          |
|      5.60         |
---------------------
total.Text = 705.6  \\ The sum of column which I need

我的代码:

private void add_click(object sender, EventArgs e) 
    SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\fuda\\Fuda.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    SqlDataAdapter da = new SqlDataAdapter();
    DataTable tl = new DataTable();
    da.SelectCommand = new SqlCommand("Select last_ret_prc from pur_temp", con);
    con.Open();
    da.Fill(tl);

    object sum_obj;
    sum_obj = tl.Compute("sum(last_ret_prc)");
    total.Text = sum_obj.ToString();
    con.close();
}
4

2 回答 2

1

像这样的东西:

var con = new SqlConnection(/*your connection string*/);
var cmd = conn.CreateCommand();
cmd.CommandText = @"Select Sum(last_ret_prc) FROM pur_temp GROUP BY last_ret_prc";
string sum_obj = cmd.ExecuteScalar().ToString();

total.Text = sum_obj;

con.Dispose();

现在 SQL 查询只返回一个值。的总和last_ret_prc。该方法ExecuteScaler()从第一行的第一列返回第一个值。

于 2013-02-23T11:58:52.407 回答
0

就目前而言,您的代码永远不会工作:

  • 列名是 last_retail_price,但您在代码中使用了 last_ret_prc。
  • con.close 应该是 con.Close()。
  • DataTable.Compute 接受两个参数“表达式”和“过滤器”。您仍然需要提供第二个参数,即使它为空。

我已经清理了代码并在本地进行了测试,它工作正常:

SqlConnection con =
    new SqlConnection(
        @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\fuda\Fuda.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter();
DataTable tl = new DataTable();
da.SelectCommand = new SqlCommand("Select last_retail_price from pur_temp", con);
con.Open();
da.Fill(tl);

object sum_obj = tl.Compute("sum(last_retail_price)", null);
total.Text = sum_obj.ToString();
con.Close();

或者,如果您只希望显示总数,您可能最好在一个 SqlCommand 中执行此操作:

con.Open();
var command = new SqlCommand("SELECT SUM(last_retail_price) FROM pur_temp", con);
var result = command.ExecuteScalar();
total.Text = result.ToString();
con.Close();
于 2013-02-23T12:25:14.057 回答