Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SP и ASP почему требуется явное указание параметра Direction / 9 сообщений из 9, страница 1 из 1
07.02.2009, 11:02
    #35803275
Kreol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
пишу SP
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
create procedure SaveTest
   @Id numeric(18,0),
   @Value varchar(256),
   @IdNew numeric(18,0) output
as
begin
   declare
     @ReturnValue int

   if(not exists (select 1 from Test where Id=@Id))
     begin
       insert into Test
       (Value)
       values
       (@Value)

       set @ReturnValue=@@error
       set @IdNew=scope_identity()
     end
   else
     begin
       update
         Test
       set
         Value=@Value
       where
         Id=@id

       set @ReturnValue=@@error
       set @IdNew=@Id
     end

    return(@ReturnValue)
end

GO

в страничке идет вывод
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
protected void Button1_Click(object sender, EventArgs e)
        {
            string ConnectionString = ConfigurationSettings.AppSettings["ConnectionString"];
            SqlConnection connection = new SqlConnection(ConnectionString);

            connection.Open();
            SqlCommand command = new SqlCommand("SaveTest", connection);
            command.CommandType = CommandType.StoredProcedure;
            SqlCommandBuilder.DeriveParameters(command);
            command.Parameters["@Id"].Value = Int32.Parse(Id.Text);
            command.Parameters["@Value"].Value = Value.Text;
            command.Parameters["@IdNew"].Direction = ParameterDirection.Output;
            command.ExecuteNonQuery();
            if ((int)command.Parameters["@RETURN_VALUE"].Value == 0)
            {
              IdNew.Text = Convert.ToString(command.Parameters["@IdNew"].Value);
               
            }

            else
            {
                
            }
            connection.Close();
без явного указания
Код: plaintext
command.Parameters["@IdNew"].Direction = ParameterDirection.Output;
по умолчанию устанавливается
Код: plaintext
Direction InputOutput System.Data.ParameterDirection
кто-нить скажет из-за чего так?. Ведь в SP вроде явно указано что должно быть.


[/SRC]
...
Рейтинг: 0 / 0
07.02.2009, 18:03
    #35803642
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
Не понятно... что именно Вас смутило... собственно output в объявлении параметра процедуры и говорит о том, что Вы можете как передавать через этот параметр значение внутрь хп, так и получать его новое значение после её (процедуры) выполнения (если не ошибаюсь для этого в вызове тоже нужно явно указать output - может и вру...)?... Чтоб было понятно... по приколу - запустите Profiler и посмотрите чем будут отличаться исходящие запросы в обоих случаях...
...
Рейтинг: 0 / 0
07.02.2009, 18:32
    #35803678
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
buser
что именно Вас смутило

Kreol
Код: plaintext
1.
2.
3.
4.
5.
create procedure SaveTest
    @Id numeric( 18 , 0 ),
    @Value varchar( 256 ),
    @IdNew numeric( 18 , 0 ) output
as
устанавливается
Код: plaintext
1.
Direction InputOutput
без явного указания
Код: plaintext
1.
command.Parameters["@IdNew"].Direction = ParameterDirection.Output;
На command.ExecuteNonQuery() - ошибка. Пишет, что процедура 'SaveTest' ожидает параметр '@IdNew'.
Почему он ждет IdNew если тот output?

В M$ SQL чисто output'овские параметры SP как-то по другому обЪявляются?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.02.2009, 18:52
    #35803692
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
Я наверное что-то упустил... на command.ExecuteNonQuery() действительно будет ексепшн?
...
Рейтинг: 0 / 0
07.02.2009, 19:20
    #35803710
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
buser
на command.ExecuteNonQuery() действительно будет ексепшн?

Со слов Kreol'а - да. Просто у меня нЭт M$ SQL'я. Если у Вас ЭстЪ - возьмите, подпишите SP'шку и посмотрите, что SqlCommandBuilder.DeriveParameters(command) запихнет в command.Parameters, в частности - в command.Parameters["@IdNew"].Direction...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.02.2009, 20:46
    #35803770
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
Да действительно есть такой косяк (я думаю это именно косяк )... но лечить его лучше через command.Parameters["@IdNew"].Value = DBNull.Value; а не через ParameterDirection.Output
Кто сможет объяснить почему он(ADO.Net) так замысловато собирает команду... буду очень признателен...
...
Рейтинг: 0 / 0
07.02.2009, 21:53
    #35803823
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
buser
почему он(ADO.Net)

IMHO, сам ADO.NET, как таковой, в этой ситуации - не виноватЪ.
Я, вон, с Sybase ASE тоже нарвался: тынць, тынць.
Там грабли в кривых дровах и system sp\'шках. Если получится, то можно попробовать подсмотреть тем же wireshark \'ом и далее уже решать что к чему...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.02.2009, 09:44
    #35804055
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
Какие глюки? У него в проце и есть InputOutput,. Если он хочет только чистый выход (зачем правда, это ж функцией легче сделать), то параметр в проце нужно объявлять как output readonly
...
Рейтинг: 0 / 0
08.02.2009, 10:33
    #35804068
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SP и ASP почему требуется явное указание параметра Direction
Random_Goodman

http://technet.microsoft.com/ru-ru/library/ms187926.aspx
OUTPUT

Показывает, что аргумент процедуры является выходным . Значение этого аргумента можно получить при помощи инструкции EXECUTE. Используйте выходные аргументы для возврата значений коду, вызвавшему процедуру. Аргументы типов text, ntext и image не могут быть выходными, если процедура не является процедурой CLR. Выходным аргументом с ключевым словом OUTPUT может быть заполнитель курсора, если процедура не является процедурой CLR. Определяемый пользователем табличный тип не может быть указан в качестве выходного параметра хранимой процедуры.

READONLY

Указывает, что параметр не может быть обновлен или изменен в теле процедуры. Если тип параметра является определяемым пользователем табличным типом, должно быть указано ключевое слово READONLY.

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


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