Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подставить значение combobox в переменную запроса  [new]
ac1-caesar
Member

Откуда:
Сообщений: 19
Уважаемые форумчане!

Строю приложение на C#. Создал хранимую процедуру в MS SQL server.
Подскажите пожалуйста как в SQL запросе поставить значение combobox? Предполагаю что нужны переменные, но как создать и подставлять не знаю.

Запрос:
with cte as (
select F.FillingDate, F.FlightStart, F.FlightEnd, F.ID_FLIGHT, RP.StartTTSN, datediff(MINUTE, F.FlightStart, F.FlightEnd) + case when F.FlightStart > F.FlightEnd then 24 * 60 else 0 end as diffight
,RP.StartTTSN*60 + sum(datediff(MINUTE, F.FlightStart, F.FlightEnd) + case when F.FlightStart > F.FlightEnd then 24 * 60 else 0 end)over (order by F.FillingDate, F.FlightStart, F.FlightEnd, F.ID_FLIGHT) as TTSN
FROM Flight F JOIN RPlane RP
ON F.ID_RPlane = RP.ID_RPlane
WHERE F.ID_RPlane = 1 AND F.FillingDate BETWEEN RP.StartDate AND GETDATE())

select F.FillingDate, F.FlightStart, F.FlightEnd, cast(diffight/ 60 as varchar(10)) + ':' + right('0' + cast(diffight % 60 as varchar(2)), 2) as FlightTime,
cast(TTSN/ 60 as varchar(10)) + ':' + right('0' + cast(TTSN % 60 as varchar(2)), 2) as TotalTime
from cte as F


В строке надо чтобы так было:

WHERE F.ID_RPlane = combobox1.SelectedValue AND F.FillingDate BETWEEN combobox2.text AND combobox3.text
15 июл 14, 14:57    [16307088]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
C#####
Guest
ac1-caesar,

>>Строю приложение на C#

так это вам в другой форум
15 июл 14, 15:01    [16307112]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8353
Добавьте в процедуру параметр, используйте параметр в запросе. Передавайте в параметр при вызове процедуры значение комбо.
15 июл 14, 15:02    [16307116]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
ac1-caesar
Member

Откуда:
Сообщений: 19
C##### , в принципе не важно на каком языке приложение. Получение данных в переменную запроса скорее всего идентична.
15 июл 14, 15:12    [16307189]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
ac1-caesar
Member

Откуда:
Сообщений: 19
Владислав Колосов , так не знаю как это сделать, совсем новичок. Подскажите плиз.
15 июл 14, 15:13    [16307197]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Konst_One
Member

Откуда:
Сообщений: 11568
всё зависит от того как вы выполняете этот запрос
15 июл 14, 15:13    [16307199]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
ac1-caesar, в справке CREATE PROCEDURE написано как объявить и использовать параметры. с примерами
15 июл 14, 15:16    [16307211]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Konst_One
Member

Откуда:
Сообщений: 11568
http://mvc4.pro/Home/Details_R/347
15 июл 14, 15:17    [16307222]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 653
ac1-caesar
C##### , в принципе не важно на каком языке приложение. Получение данных в переменную запроса скорее всего идентична.

На делфи к примеру можно было сделать что-то типа:


...............
var SQLText : String; 
...............
   SQLText = '....manybukv before...' + 
     'WHERE F.ID_RPlane = ' + combobox1.SelectedValue + ' AND F.FillingDate BETWEEN ' + combobox2.text + ' AND '+ combobox3.text;

   ADOQuery1.SQL.ADD(SQLText);

   ADOQuery1.Active := true;
...............
15 июл 14, 15:20    [16307233]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Konst_One
Member

Откуда:
Сообщений: 11568
Mikle83
ac1-caesar
C##### , в принципе не важно на каком языке приложение. Получение данных в переменную запроса скорее всего идентична.

На делфи к примеру можно было сделать что-то типа:


...............
var SQLText : String; 
...............
   SQLText = '....manybukv before...' + 
     'WHERE F.ID_RPlane = ' + combobox1.SelectedValue + ' AND F.FillingDate BETWEEN ' + combobox2.text + ' AND '+ combobox3.text;

   ADOQuery1.SQL.ADD(SQLText);

   ADOQuery1.Active := true;
...............


и была бы ошибка синтаксиса
15 июл 14, 15:21    [16307250]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 653
в вашем случае вызов процедуры аналогично - просто собрать строку вызова с нужными параметрами.
типа

SQLText = 'exec MySP_Procedure @Param1 = ' + value_of_param
15 июл 14, 15:21    [16307251]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 653
Konst_One
и была бы ошибка синтаксиса

скорее всего еще и не одна, но это не рабочий код, а алгоритм как можно сделать.
15 июл 14, 15:22    [16307255]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Konst_One
Member

Откуда:
Сообщений: 11568
не надо советовать не очень хорошие решения.
нужно использовать параметры
15 июл 14, 15:24    [16307272]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 653
Konst_One
не надо советовать не очень хорошие решения.
нужно использовать параметры


"Хорошесть" решения = понятие очень относительное и зависит от конкретной задачи.

Тот же DELPHI (да и C# не далеко ушел), сделайте три "замера" по времени работы кейсов:

а) многократный вызов (>1000) хранимой процедуры с различными значениями параметров (именно через параметры задавая);
б) многократный вызов этой же процедуры, динамический запрос собирается в отдельную переменную и в ADOQuery
закидывается результирующее значение;
в) многократный вызов этой же процедуры, но с генерацией динамического запроса (добавления каждого параметра путем расширения строки ADOQuery.SQL.Text)

Оч. забавные результаты получаются.
Альтернативное решение, с минимальной зависимостью от драйверов конкретно взятой СУБД = вполне себе имеет право на жизнь.
15 июл 14, 15:36    [16307340]     Ответить | Цитировать Сообщить модератору
 Re: Подставить значение combobox в переменную запроса  [new]
Konst_One
Member

Откуда:
Сообщений: 11568
слышали про sql-инъекции? если нет, то найдите и почитайте
15 июл 14, 15:40    [16307381]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить