Как получить значение функции SUM в SQL с помощью c #

У меня есть хранимая процедура CalculateTotal, чтобы вернуть SUM всех записей в столбце Сумма из Табличных затрат

`CREATE PROCEDURE CalculateTotal @Name varchar(50), @Month int @year As SELECT SUM(Amount) As Total FROM Spendings WHERE MONTH(Date) = @Month AND YEAR(Date)= @Year AND Name = @Name` 

Когда я выполняю эту процедуру с SQLServer, выполнение выполнено успешно и возвращено Total amount,
Мне нужно получить значение Total from C #, я попробовал следующий код,

 public void CalculateTotal(string name, int month , int year) { cmd = connection.CreateCommand(); cmd.CommandText = "EXECUTE CalculateTotal @Name,@Month,@Year"; cmd.Parameters.AddWithValue("@Name", name); cmd.Parameters.AddWithValue("@Month", month); cmd.Parameters.AddWithValue("@Year", year); reader = cmd.ExecuteReader(); if(reader.HasRows) { while (reader.Read()) { int total = (int)reader["Total"]; } } } 

когда я отлаживаю его, условие «Пока» истинно, и когда цикл «while» выполнен с ошибкой, вызванной IndexOutOfRangeException: Total

Как я могу сделать это, чтобы получить значение функции SUM в c #

При возврате одного значения из SQL Server через ADO я предлагаю вам использовать ExecuteScalar. Пример использования:

  Int32 total= (Int32)cmd.ExecuteScalar(); 

Также обратите внимание на реализацию шаблона использования, чтобы убедиться, что вы не вызываете утечку памяти.

Можете попробовать что-то вроде этого.

 public void CalculateTotal(string name, int month , int year) { cmd = connection.CreateCommand(); cmd.CommandText = "CalculateTotal"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@Name", name); cmd.Parameters.AddWithValue("@Month", month); cmd.Parameters.AddWithValue("@Year", year); connection.Open(); string result = cmd.ExecuteScalar().ToString(); connection.Close(); } 

Измените свою процедуру;

  CREATE PROCEDURE CalculateTotal @Name varchar(50), @Month int @year int @Total int Output As BEGIN SELECT @Total = SUM(Amount) FROM Spendings WHERE MONTH(Date) = @Month AND YEAR(Date)= @Year AND Name = @Name END 

Вам нужно добавить параметр return в команду:

 public void CalculateTotal(string name, int month , int year) { cmd = connection.CreateCommand(); cmd.CommandText = "CalculateTotal"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@Name", name); cmd.Parameters.AddWithValue("@Month", month); cmd.Parameters.AddWithValue("@Year", year); var returnParameter = cmd.Parameters.Add("@Total", SqlDbType.Int); returnParameter.Direction = ParameterDirection.ReturnValue; int total = (Int32)cmd.ExecuteScalar(); } 

Я попробовал код с приведенным ниже примером:

 SqlCommand cmd2 = new SqlCommand(); cmd2 = con.CreateCommand(); cmd2.CommandText = "gettotalprice"; cmd2.CommandType = CommandType.StoredProcedure; cmd2.Parameters.AddWithValue("@ordernums", ordnum.Text); string result = cmd2.ExecuteScalar().ToString(); Label2.Text = "<b>Total Amount= </b>" + result + " Rs."; 

Это работало для меня все нормально, без проблем, и я получил общую сумму.

  • Если еще нужно обновить SQL-запрос для объединения нескольких запросов
  • Разбиение на страницы на SQL Server 2008
  • Совокупные текстовые данные с использованием SQL
  • Интеграция базы данных с сервером Mysql и SQL
  • как сохранить путь к базе данных sql в java
  • Выбор и удаление дублированных строк для определенных столбцов SQL
  • IDbCommand назвал параметры как для MySQL, так и для SQL Server
  • сколько работы мы должны делать в базе данных?
  • Есть ли разница b / w IS NULL в MySQL и MS SQL
  • SQL * = инструкция (внешнее соединение)
  • что такое mysql-эквивалент блока catch try сервера sql-сервера
  • Давайте будем гением компьютера.