2013-02-23 3 views
3

Мне нужно вычислить сумму столбца и отобразить его в total.Text. Как я могу это достичь? Этот столбец имеет неограниченные данные, которые всегда могут измениться. Я использую VS2010. Я новичок в C#.Как выполнить вычисление столбца при использовании DataTable?

Пример:

_____________________ 
| 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(); 
} 

ответ

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(); 
+0

здесь его дает мне ошибку в строке ниже объекта sum_obj = tl.Compute ("сумма (last_retail_price)", NULL); \\ Неверное использование агрегатной функции Sum() и Type: String. такая же ошибка во всех выше кодировках даже моя тоже .... –

+0

@ neo.orz.hk help me –

+0

его давая мне ошибку –

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() возвращает первое значение из первого столбца в первой строке.

Смежные вопросы