Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
1

Как передать параметры в процедуру

18.06.2012, 20:13. Показов 2040. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
БД oracle имеется вот такая процедура
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE PROCEDURE addchecks (colpar NUMBER,fupar VARCHAR,quantpar NUMBER,salepar DATE,bonpar NUMBER)
AS
colnumber NUMBER;
BEGIN
SELECT 
  id INTO colnumber
FROM 
  (SELECT
     fuel_column.id,
     column_number,
     fuel
   FROM
     fuel_column,
     fuel
   WHERE
     id_fuel=fuel.id) mycolumn 
WHERE
  mycolumn.column_number=colpar AND
  mycolumn.fuel=fupar;
IF (colnumber IS NOT NULL)
  THEN INSERT INTO checks VALUES (NULL,colnumber,quantpar,salepar,bonpar);
END IF;
END;
Так вот вопрос как ее вызвать в программе и передать ей входные параметры?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2012, 20:13
Ответы с готовыми решениями:

Как передать параметры в BackgroundWorker
Здравствуйте. В общем надо чтобы при нажатии на кнопку выполнялась операция, но т.к. она...

Как передать параметры неуправляемому коду
Здравствуйте.У меня такая проблема,нужно дотянуться до сторонней программы (chdbfl.exe поставляется...

Как передать Hashtable через процедуру
Здравствуйте. Мне нужно в процедуре обрабатывать данные и записывать их в hashtable, чтобы в...

Как передать параметр в хранимую процедуру с типом nvarchar
Добрый день! Есть хранимая процедура ALTER PROCEDURE . @name_sotr nvarchar(50) AS BEGIN ...

8
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
18.06.2012, 21:27 2
по-моему там обычным select'om, типа такого:
C#
1
2
классДляКоммандОракл command=new ....("select*from addchecks);
command.Parameters.Add(..);//и тут параметры, что в скобках у процедуры
1
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
18.06.2012, 22:04  [ТС] 3
хм, спасибо, попробую, я правда уже додумался вот до чего
C#
1
ChangeChecks.CommandText = "begin addchecks(" + checkcolumn + ",'" + checkfuel + "'," + checkquantity + ",'" + checkdatasale + "'," + checkbonus + "); end;";
правда возникает ошибка что неправильное представление времени, то бишь нельзя оракловскому объекту date передать значение типа 'день.месяц.год минута.секунда' можно ли как нибудь решить сию проблему не разбивая в таблице дату на собственно дату и время?
0
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
18.06.2012, 22:18 4
там у Datetime есть метод ToShortDateString(). Может им воспользоваться?
0
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
18.06.2012, 22:38  [ТС] 5
нет не подходит

Добавлено через 4 минуты
Все, нашел решение, оказывается в процедуру надо передавать дату так
to_date('1998/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam')
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
19.06.2012, 07:38 6
Параметры надо передавать в виде параметров, а не с помощью конкатенации строк.
Например вот, для даты:
C#
1
2
3
4
5
ChangeChecks.CommandText = "begin addchecks(" + checkcolumn + ",'" + checkfuel + "'," + checkquantity + ",:salepar," + checkbonus + "); end;";
var saleparParameter = ChangeChecks.CreateParameter();
saleparParameter.Value = checkdatasale;
saleparParameter.ParameterName = "salepar";
ChangeChecks.Prameters.Add(saleparParameter);
Предполагается, что переменная checkdatasale имеет тип DateTime.
0
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
19.06.2012, 12:12  [ТС] 7
А в чем смысл, если результат один и тот же, а кода больше ?

Добавлено через 1 минуту
Тогда уж надо и процедуру получается переписывать )
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
19.06.2012, 12:31 8
Смысл в меньшем количестве проблем.
Например что если в переменной checkfuel, случайно, окажется строка типа такой:
Код
',null,null,null,null); execute immediate 'drop table fuel'; addchecks(null,'
Представляете последствия?
В случае с параметрами, почти никаких последствий не будет, разве что процедура ничего не сделает.

Еще одно преимущество в том, что сервер Oracle не будет каждый делать Hard parse строки. Так как она будет всегда одинаковая, а только лишь будут меняться значения параметров.
После первого вызова он положит её в кэш и потом уже брать оттуда.
1
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
19.06.2012, 14:11  [ТС] 9
Хм, спасибо, но так то я проверяю все переменные на соответствие прежде чем передать их в процедуру, так что думаю ничего страшного произойти не должно, а вот насчет быстродействия вы пожалуй правы.
Кстати вот еще один вопрос. Не по данной теме но все таки. Как сделать так чтобы в ячейке датагридвью дата отображалась полностью, то бишь с секундами, а то почему то дату показывает нормально dd.mm.yyyy а время выдает в формате hh.mm,почему секунды не показывает ?
0
19.06.2012, 14:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2012, 14:11
Помогаю со студенческими работами здесь

Как передать в процедуру Oracle параметр типа table%rowtype из ADO.NET?
Привет, что-то затруднился. Возможен ли вызов оракловой процедуры через ADP.NET у которой входой...

Передать параметры программе
Есть программа, загружающая на сайт изображения, она добавляет в контекстное меню windows пункт...

Не получается передать параметры в поток
Всем привет. Собственно вопрос, где ошибка, почему не получается сделать так (передать параметр в...

Передать параметры во вложенный запрос
SELECT result.benennung, result.maschine_name, result.nummer, result.benennung_ru,...


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

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