Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 12
1
MySQL

Как выполнить UPDATE записи в БД через процедуру?

29.04.2018, 15:56. Показов 1193. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть процедура:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALTER PROCEDURE [dbo].[Close_Order]
@Code_order INT,
@IN DATE,
@OUT DATE,
@Days INT,
@Num INT,
@NumSum INT,
@RESULT INT
AS
UPDATE Orders SET Дата_отъезда=GETDATE() WHERE Код_заказа=@Code_order
SET @IN=(SELECT Дата_въезда FROM Orders WHERE Код_заказа=@Code_order)
SET @OUT=(SELECT Дата_отъезда FROM Orders WHERE Код_заказа=@Code_order)
SET @Days=DATEDIFF(DAY,@IN,@OUT)
SET @Num=(SELECT Код_номера FROM Orders WHERE Код_заказа=@Code_order)
SET @NumSum=(SELECT Стоимость_сутки FROM Rooms WHERE Код_номера=@Num)
SET @RESULT=@NumSum*@Days
UPDATE Orders SET Срок_аренды=@Days,Стомость_итоговая=@RESULT WHERE Код_заказа=@Code_order
Для изменения пытаюсь использовать UpdateCommand, но безуспешно.

C#
1
2
3
4
5
6
7
8
9
10
using (SqlConnection connection = new SqlConnection(cstring))
            {
                connection.Open();
                adapter = new SqlDataAdapter(query, connection);
                commandBuilder = new SqlCommandBuilder(adapter);
                adapter.UpdateCommand = new SqlCommand("Close_Order", connection);
                adapter.UpdateCommand.CommandType = CommandType.StoredProcedure;
                adapter.UpdateCommand.Parameters.Add(new SqlParameter("@Code_order", SqlDbType.Int, 0, ONum));;
                adapter.Update(ds);
            }
Переменная ONum берется из gridView:

C#
1
2
string ONum = dataGridView5.CurrentRow.Cells["Код_заказа"].Value.ToString();
string query = "SELECT * FROM Orders";
При попытке изменить запись никаких изменений в БД нет. Не уверен, что верно использую UpdateCommand, по этому прошу вашей помощи.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2018, 15:56
Ответы с готовыми решениями:

Не получается записать через метод Update адаптера только обновленные записи DataTable
Использую параметризированный dataset не получается передать в метод Update адаптера только...

Как mysql update выполнить через время после запроса?
у меня есть запрос который должен по истечению минуты только выполнять update а оно сразу выполняет...

Как выполнить эту программу через процедуру?
Дано вещественное число X (|X| < 1) и целое число N > 0. Написать функцию для вычисления суммы...

Как сделать Update записи через SQL-команду?
В одной книге написано: -------------------------- Для того чтобы изменить данные в вашей базе...

3
Эксперт .NET
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,642
29.04.2018, 16:20 2
Huskie, что за уродство в процедуре?

SQL
1
2
3
4
5
SET @IN=(SELECT Дата_въезда FROM Orders WHERE Код_заказа=@Code_order)
SET @OUT=(SELECT Дата_отъезда FROM Orders WHERE Код_заказа=@Code_order)
SET @Days=DATEDIFF(DAY,@IN,@OUT)
SET @Num=(SELECT Код_номера FROM Orders WHERE Код_заказа=@Code_order)
SET @NumSum=(SELECT Стоимость_сутки FROM Rooms WHERE Код_номера=@Num)
За один запрос это вытащить никак?

Для MySQL есть свой поставщик ADO.NET.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 12
29.04.2018, 17:17  [ТС] 3
Я переделал под вызов процедуры
C#
1
2
3
4
5
6
7
8
ONum=Convert.ToInt32(ONum);
            using (SqlConnection connection = new SqlConnection(cstring))
            {
                connection.Open();
                SqlCommand command = new SqlCommand("Close_order", connection);
                command.Parameters.Add("@Code", SqlDbType.Int, ONum);
                command.ExecuteNonQuery();
            }
Процедура:

SQL
1
2
CREATE PROCEDURE Close_order @Code INT AS
UPDATE Orders SET Дата_отъезда=(SELECT GETDATE()) WHERE Код_заказа=@Code
Но при использовании вылетает ошибка (Скрин во вложении)
Миниатюры
Как выполнить UPDATE записи в БД через процедуру?  
0
HF
1163 / 749 / 181
Регистрация: 09.09.2011
Сообщений: 2,315
Записей в блоге: 2
29.04.2018, 20:56 4
Лучший ответ Сообщение было отмечено Huskie как решение

Решение

Тут ошибка. Вы не правильно поняли смысл этого метода
Цитата Сообщение от Huskie Посмотреть сообщение
command.Parameters.Add("@Code", SqlDbType.Int, ONum);
Вы использовали эту перегрузку
Метод SqlParameterCollection.Add (String, SqlDbType, Int32)
где третий параметр означает - размер элемента. Её используют в основном для текста.

А вам нужно воспользоваться или вариантом:
1) добавить параметр + добавить его (по ключу из параметров) значение
C#
1
2
        command.Parameters.Add("@ID", SqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;
2) или методом, совмещающим в себя два действия
Код
command.Parameters.AddWithValue("@ID", customerID);
Добавлено через 3 минуты
Дополнение:

Здесь не нужно Select для Getdate(). Он и без этого неплохо создаст значение.
Цитата Сообщение от Huskie Посмотреть сообщение
UPDATE Orders SET Дата_отъезда=GETDATE() WHERE Код_заказа=@Code
0
29.04.2018, 20:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2018, 20:56
Помогаю со студенческими работами здесь

Добавление записи в datagridview через хранимую процедуру
Доброго времени суток:) тестирую уже полдня возможность добавления записи в datagridview:wall: -...

Как в процедуру 1 передать адрес процедуры 2 через параметр чтобы процедура 1 выполнила процедуру 2
Зачем мне это нужно? Затем что написан вложеный цикл от 0 до N в нём цикл от 0 до M, в программе...

Как выполнить SQL процедуру в Access?
Выяснил, что надо использовать АДО, но не понял какой синтаксис Пример хранимой процедуры в SQL:...

WM_LBUTTONDOWN - как выполнить эту процедуру?
Доброе время суток. Я написал следующий код: // ... procedure WMLDown(var MSG: TMessage);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru