![]() |
|
Модераторы: gambit |
![]()
|
|
| D_EMO_N |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Подскажите как использовать ф-ции БД в C#.
Есть функция к-рая должна получать параметры и возвращать bit, для того что-бы потом C# по 1 или 0 определял что ему делать дальше, но как это реализовать не понял, пробыва на разных примерах но ничего не выходит
не обрабатывает просто, возможно неправильный синтаксис и просто не может найти фцию из-за того что указан тип как у процедуры?(CommandType.StoredProcedure), но тогда как правильно, т.к. ХП не может возвращать параметры...вроде... Это сообщение отредактировал(а) D_EMO_N - 5.2.2008, 12:37 |
||||
|
|||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
D_EMO_N,
Приветствую. ХП может возвращать параметры. Посмотри документацию: Электронная документация по SQL Server 2005 CREATE PROCEDURE (Transact-SQL) ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/tsqlref9/html/afe3d86d-c9ab-44e4-b74d-4e3dbd9cc58c.htm Добавлено через 4 минуты и 46 секунд Вот пример ХП, которая вносит новую строку в таблицу БД и возвращает присвоенный этой строке id. Ключевое слово OUTPUT
Ты можешь задать возвращение того или иного параметра по тому или иному условию внутри ХП. А в приложении принимать эти параметры и обрабатывать. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| D_EMO_N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
У меня MS SQL 2000. Там OUTPUT, но он задается при комманде SELECT и выводит данный из таблицы,
а у меня случай когда из таблицы выбираются параметры, сравниваются, и возвращают параметр
|
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
D_EMO_N,
Если я правильно понял, то тебе надо проверять есть ли в таблице БД запись с данным id пользователя и id организации. Так? Решение простое. Пишешь простую ХП с инструкцией
соответсвенно такая ХП вернет 1, если такой пользователь есть, и соответственно 0, если такой строки в таблице нет. Удачи. Это сообщение отредактировал(а) thomas - 5.2.2008, 13:13 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| D_EMO_N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Спс, томас. Не, там намного тяжелее все.
так что обыычным подсчтетом кол-ва строк тут нельзя обойтись. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
D_EMO_N,
Тогда ищи как в ХП выполнять твою функцию. Потом из программы обрабатывай что вернет ХП. 1 или 0. А вообще интересно как у тебя там построена иерархия доступа и как она отображена в таблицах БД. Может есть вариант это дело организовать в одной таблице. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| 1stain |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 5 Всего: 40 |
ты же в первои примере получаешь то, что тебе надо, но сразу же теряешь:
попробуй так:
Это сообщение отредактировал(а) 1stain - 5.2.2008, 16:36 -------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
||||
|
|||||
| D_EMO_N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
все равно нет. при дебаге тупо выполняет эту строчку, а на следующюю не реагирует.
Даже если я там ошибочное напишу - 0 реакци. :( т.е. строка
|
|||
|
||||
| thomas |
|
||||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
D_EMO_N,
Приветствую. Выше я приводил код самой ХП в БД, которая возвращает параметр(присвоенный строке id). Теперь приведу код который работает с этой ХП в приложении.
Обрати внимание на эти две строки кода
Они определяют что должна вернуть процедура. А дальше обрабатывается что же она вернула
А что у тебя?
Подумай еще раз. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||||
|
|||||||||
| 1stain |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 5 Всего: 40 |
что-то меня терзают смутные сомнения... Что за метод ExecuteScalarCmd и не обрабатываются ли там исключения при выполнении?
Для вызова функций тип команды CommandType.StoredProcedure не ставится Попробуй так:
з.ы. кстати, зачем писать свои обертки для стандартных методов? -------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
||||
|
|||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Меня с самого начала по этому поводу терзали смутные сомнения. До сего момента, я работал исключительно с sql-командами и с недавнего времени начал использовать Хранимые процедуры. Про функции на сервере, скажем так, слышал, но толком не юзал. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| D_EMO_N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Потому что потом много раз будет использоваться этот метод, и что-бы не открывать новое подключение, т.к. пользователь уже залогинился в программу |
|||
|
||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
D_EMO_N,
Извиняюсь, может я чего то не допонимаю, но вот это
как то не вяжеться с этим
Насколько я понимаю конструкция using предполагает автоматическое закрытие соединения и освобождение ресурсов. К тому же там используется слово new. Т.е. каждый раз создается новое соединение на основании connectionString. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
| D_EMO_N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
ой. я не то имел в виду. что-бы для каждого соединения не писать новую процедуру подключение, а не само подключение.
и вопрос вот такой, в дебаг режиме просто не обрабатывается строчка 18: return result \ это из ExecuteScalarCmd, может ошибка в том что SQL не правильно возвращает данные? |
|||
|
||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
D_EMO_N,
А строчка 15
что дает? Добавлено через 1 минуту и 31 секунду
Если установлена management studio, то попробуй выполнить свой запрос там и посмотри что он вернет. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
| D_EMO_N |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
должна получать папаметр к-рый возвращает ф-ция. (Уже процедура, оборачивающяя фцию) , в дебагере я это не могу посмотреть, т.к. на тот момент когда он находится там эта строчка ещё не выполнена, а после выполнения сразу переносит обратно, возможно по тому что ExecuteScalar возвращает null (случай если нет никакого параметра)
нету такой |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |