powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SP и ASP почему требуется явное указание параметра Direction
9 сообщений из 9, страница 1 из 1
SP и ASP почему требуется явное указание параметра Direction
    #35803275
Kreol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пишу 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
SP и ASP почему требуется явное указание параметра Direction
    #35803642
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понятно... что именно Вас смутило... собственно output в объявлении параметра процедуры и говорит о том, что Вы можете как передавать через этот параметр значение внутрь хп, так и получать его новое значение после её (процедуры) выполнения (если не ошибаюсь для этого в вызове тоже нужно явно указать output - может и вру...)?... Чтоб было понятно... по приколу - запустите Profiler и посмотрите чем будут отличаться исходящие запросы в обоих случаях...
...
Рейтинг: 0 / 0
SP и ASP почему требуется явное указание параметра Direction
    #35803678
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SP и ASP почему требуется явное указание параметра Direction
    #35803692
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверное что-то упустил... на command.ExecuteNonQuery() действительно будет ексепшн?
...
Рейтинг: 0 / 0
SP и ASP почему требуется явное указание параметра Direction
    #35803710
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SP и ASP почему требуется явное указание параметра Direction
    #35803770
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да действительно есть такой косяк (я думаю это именно косяк )... но лечить его лучше через command.Parameters["@IdNew"].Value = DBNull.Value; а не через ParameterDirection.Output
Кто сможет объяснить почему он(ADO.Net) так замысловато собирает команду... буду очень признателен...
...
Рейтинг: 0 / 0
SP и ASP почему требуется явное указание параметра Direction
    #35803823
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SP и ASP почему требуется явное указание параметра Direction
    #35804055
Random_Goodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие глюки? У него в проце и есть InputOutput,. Если он хочет только чистый выход (зачем правда, это ж функцией легче сделать), то параметр в проце нужно объявлять как output readonly
...
Рейтинг: 0 / 0
SP и ASP почему требуется явное указание параметра Direction
    #35804068
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SP и ASP почему требуется явное указание параметра Direction
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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