powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / хранимая процедура ado.net
21 сообщений из 21, страница 1 из 1
хранимая процедура ado.net
    #35789046
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начинаю осваивать ADO.NET в visual 2008.

Проблема такая. Есть MS SQL 2008. Создал SP в своей базе. Хранимка принимает на входе четыре параметра, выдает несколько полей.
Когда запускаешь процедуру в самом сервере параметры принимаются без проблем.
Когда пытаюсь вызвать эту процедуру и передать ей параметры из своего приложения на ASP.NET отрабатывает некорректно.
Дело в том что параметры в хранимой процедуре могут быть указаны не все. Часть остается не установленными.
Так вот, в sql все ок, если я некоторые параметры оставляю просто пустыми (данные там varchar и datatime), но когда я вытаюсь выполнить процедуру в приложении и оставляю параметры не определенными то ничего не ищет,поиск идет когда определишь все параметры.
В чем может быть дело?
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35789250
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ecoli
оставляю параметры не определенными

1. Инициализируйте их DBNull.Value
2. Что в этом случае приходит в SP?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create procedure sp_WithDefaultParam
   @Param1 int=null,
   @Param2 int=null,
   @Param3 int=null
as
begin
   declare
     @RetVal int

   set @RetVal= 0 

   select @Param1, @Param2, @Param3

   return(@RetVal)
end
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
cmd.CommandType=CommandType.Text;
cmd.CommandText="{call sp_WithDefaultParam}";
rdr=cmd.ExecuteReader(); // NULL
rdr.Close();

cmd.CommandType=CommandType.Text;
cmd.CommandText="call sp_WithDefaultParam(?)";
cmd.Parameters.Add("Param1",OleDbType.Integer).Value= 1 ;
rdr=cmd.ExecuteReader(); // Тут падаем с error:	"[Native Error code: 2812]\n[DataDirect ADO Sybase Provider] Stored procedure 'call sp_WithDefaultParam(@1)' not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output)." Хотя... Мо это и особенность Sybase ASE only...
rdr.Close();

cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="sp_WithDefaultParam";
OleDbCommandBuilder.DeriveParameters(cmd);
rdr=cmd.ExecuteReader(); // NULL
rdr.Close();
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35789762
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с null не работает
вот код самой процедуры
авторprocedure [dbo].[person_search]
(@person_BirthDay as varchar (20),
@person_SurName as varchar (20),
@person_FirName as varchar (20),
@person_SecName as varchar (20))
as
if @person_Birthday != ''
begin
SELECT Person_SurName, Person_FirName, Person_SecName, Person_BirthDay
FROM v_Person
WHERE Person_SurName like @person_SurName+'%'
and Person_FirName like @person_FirName+'%'
and Person_SecName like @person_SecName+'%'
and (Person_BirthDay = convert(datetime,@person_BirthDay, 104))
end
else
SELECT Person_SurName, Person_FirName, Person_SecName, Person_BirthDay
FROM v_Person
WHERE Person_SurName like @person_SurName+'%'
and Person_FirName like @person_FirName+'%'
and Person_SecName like @person_SecName+'%'
and Person_BirthDay between '01/01/1900' and GETDATE()

на сервере отрабатывает все ок,
в приложении не работает
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35789764
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смысл все этого: на форме есть четрые текстовых бокса фамилия имя отчество др. При поиске человека не всегда известны все данные, некоторые боксы остаются пустыми не null.
Как быть?
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35789811
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нулл это не пустая строка (в MSSQL), либо передавайте не NULL а '', либо исправляйте процедуру

Код: plaintext
1.
if @person_Birthday is not null
begin
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35789824
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело в том что я и передаю в переменную ''.
Делаю в VS 2008 проект, там по умолчанию предлагается заменить пустую переменную на null, это параметр я убрал. Но все равно не отрабатывает корректно.
Когда выполняю хранимку через management studio передаю переменные так
автор@person_birthday='12.11.1976',@person_surname='',person_firname='',person_secname='';
отрабатывает корректно, т.е. выдает всех людей у кого дата рождения 12.11.1979 (в коде выше видно что идет конвертация строки в дату).
Но когда я заполняю поля в форме поиска в приложении, если не заполнить все остальные поля поиск не пойдет. (( в чем может быть дело?
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790081
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ecoli
Код: plaintext
1.
@person_BirthDay as varchar ( 20 )

/me думет: повбивав би...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790088
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ex_Soft
[quot ecoli]
Код: plaintext
1.
@person_BirthDay as varchar ( 20 )

/me думет: повбивав би...
[/quot Ex_Soft]

не понял не одного слова в посте, кроме моей цитаты )))
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790100
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ecoli
кроме моей цитаты

Этого - достаточно. Надеюсь Вы не дальтоник и телебачер у Вас не черно-белый...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790156
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что не так?
вводится дата строковой переменной, затем конвертируется в дату.
Здесь все работает.
Не понятно почему хранимая процедура вызываемая из приложения не работает пока ей не указать все параметры, а мне надо чтобы работало как в sql без указания некоторых параметров.

Я так вижу что просто не понятно в чем у меня проблема. Тогда еще раз обрисую.
Есть хранимая процедура на sql server 2008 ent. Когда вызываешь ее и передаешь параметры (оставляя некоторые пустыми в таком виде '') все работает как надо. Задаешь только фамилию и дату рождения находит нужного человека. Когда все это дело происходит в web приложении на страничке где 4 текстовых поля, работает только тогда когда указываешь значения во всех четырех полях. Т.е. обязательно нужно определить все четыре переменные.
Проблема в том как сделать так чтобы в моем web приложении работало так же как на servere sql. Т.е. без точного указания всех четырех переменных.
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790203
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так (без проверки - навскидку):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create procedure person_search
   @person_BirthDay date=null,
   @person_SurName varchar( 20 )=null,
   @person_FirName varchar( 20 )=null,
   @person_SecName varchar( 20 )=null
as
begin
   select
     Person_SurName,
     Person_FirName,
     Person_SecName,
     Person_BirthDay
   from
     v_Person
   where
     ((@person_SurName is null) or (Person_SurName like @person_SurName))
     and ((@person_FirName is null) or (Person_FirName like @person_FirName))
     and ((@person_SecName is null) or (Person_SecName like @person_SecName))
     and ((@person_BirthDay is null) or (Person_BirhtDay=@person_BirthDay))
end

Ессессно из-за финта ушами с is null - natural scan... Если не устраивает, как вариант, DSQL... Хотя... Бабушка надвое сказала, что в этом случае оптимальнее будет... Ну или самый опримальный вариант - куча if'ов...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
....
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="person_search";
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["@person_SurName"].Value = (tmpString=TextBoxSurName.Text.Trim())!=string.Empty ? object(tmpString+"%") : DBNull.Value;
cmd.Parameters["@person_FirName"].Value = (tmpString=TextBoxFirName.Text.Trim())!=string.Empty ? object(tmpString+"%") : DBNull.Value;
cmd.Parameters["@person_SecName"].Value = (tmpString=TextBoxSecName.Text.Trim())!=string.Empty ? object(tmpString+"%") : DBNull.Value;
cmd.Parameters["@person_BirthDate"].Value = (tmpString=TextBoxSurName.Text.Trim())!=string.Empty ? object(DateTime.Parse(tmpString)) : DBNull.Value; // здесь - схалявил. Нуна, ессесно, более железобетонно...
rdr=cmd.ExecuteReader();
....
?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790206
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хммм....
интересно, надо будет поробовать.
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790222
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уважаемый Ex_Soft,
все равно история таже
Создал процедуру на сервере по вашему шаблону. Отработала нормально.
попытался ее обработь в приложении опять таже фигня. Пробный запрос с датой рождения прошел, ношел всех людей с определенной датой рождения, а вот при попытке поиска только по фамилии вылетел по таймауту :((
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790241
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ecoli
попытался ее обработь в приложении опять таже фигня

Как? Код в студию... Тока ж без фанатизма - самую суть... BTW, про [ src ] не забываем
ecoli
при попытке поиска только по фамилии вылетел по таймауту

Гм... Сока записей в таблице?
Ex_Soft
Ессессно из-за финта ушами с is null - natural scan...

хотя...
ecoli
запрос с датой рождения прошел

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790489
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<asp:SqlDataSource runat="server" ID="promed_search_person"
       selectcommand="person_search_3" 
            ConnectionString="<%$ ConnectionStrings:promedConnectionString %>" SelectCommandType="StoredProcedure"
       >
           <SelectParameters>
               <asp:ControlParameter ControlID="Tb_person_BirthDay" 
                   ConvertEmptyStringToNull="False" Name="person_Birthday" PropertyName="Text" />
               <asp:ControlParameter ControlID="Tb_person_SurName" 
                   ConvertEmptyStringToNull="False" Name="person_SurName" PropertyName="Text" 
                   DefaultValue="" />
               <asp:ControlParameter ControlID="Tb_person_FirName" 
                   ConvertEmptyStringToNull="False" Name="person_FirName" PropertyName="Text" 
                   DefaultValue="" />
              <asp:ControlParameter ControlID="Tb_person_SecName" 
                   ConvertEmptyStringToNull="False" Name="person_SecName" PropertyName="Text" 
                   DefaultValue="" />
                         </SelectParameters>
    </asp:SqlDataSource>
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35790512
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в таблице 637608 записи
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35791249
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ecoli
Код: plaintext
1.
asp:SqlDataSource

Не... Тут я - пас... Я такое не юзаю, а разбирацо - времени - нЭт... Да и - лень, если честно...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35791253
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ecoli
637608 записи

/me думает: вроде - семечки, но в контексте
ecoli
Код: plaintext
1.
 asp:SqlDataSource

бедный Ваш сервер и бедные пользователи...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35792065
serghey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычно ставят noyhing например(vb.net) если параметр должен быть по умолчанию
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35792401
ecoli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ex_Soft
Код: plaintext
1.
 asp:SqlDataSource

бедный Ваш сервер и бедные пользователи...

А это плохо? Я же написал что только изучаю предмет. Лучше всетаки использовать dataset?
...
Рейтинг: 0 / 0
хранимая процедура ado.net
    #35843770
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
off

ecoli
А это плохо?

наткнулсо:
Мак-Дональд, Мэтью, Шпушта, Марио. Microsoft ASP.NET 3.5 с примерами на C# 2008 для профессионалов, 2-е изд.
Жизненный цикл страницы с привязкой данных

...Важно понять, что этот процесс повторяется для каждого запроса. Это означает, что элемент управления-источник данных запрашивает базу данных при каждой обратной отправке страницы. Если это кажется излишней работой для вашей базы данных - что ж, так оно и есть...



_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / хранимая процедура ado.net
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]