Хранимые процедуры
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Хранимые процедуры Expand / Collapse
Автор
Сообщение
11.06.2006 19:20
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 09.10.2008 16:09
Сообщ.: 96, Visits: 874
Столкнулся со странной проблемой никак не могу создать хранимую процедуру, говорит типа текстовые аргументы не допустимы. Исключая их дейстивельно всё получается.

Вот текст:

CREATE PROCEDURE spViewMobile
@Parts int output,
@Name text output,
@Category text output,
@Price money output,
@UserID int
AS
select @Parts=TblParts.PartID,@Name=Namess,@Category=Category,@Price=Price
from TblParts,TblShoppingCart
where (TblParts.PartID=TblShoppingCart.BTS
or TblParts.PartID=TblShoppingCart.Curpet
or TblParts.PartID=TblShoppingCart.Color
or TblParts.PartID=TblShoppingCart.Engine
or TblParts.PartID=TblShoppingCart.Frame
or TblParts.PartID=TblShoppingCart.Wheels)
and TblShoppingCart.UserID=@UserID
GO
Сообщ. #898513
12.06.2006 12:15
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Все правильно. Используй varchar(8000) вместо text или возвращай данные не как output параметры, а в виде таблицы. Или переходи на sql2005 где есть новый тип данных varсhar(max).
Сообщ. #898523
12.06.2006 13:43


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
В 2005 в OUTPUT парамерах можно использовать не только varchar(max), но и text.
Сообщ. #898528
12.06.2006 15:22
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Alexey Spirin (12.06.2006)
В 2005 в OUTPUT парамерах можно использовать не только varchar(max), но и text.

Еще один плюс в пользу перехода на него :)
Сообщ. #898534
13.06.2006 17:35
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 09.10.2008 16:09
Сообщ.: 96, Visits: 874
Спасибо за совет, все получилось.
Сообщ. #898615
15.06.2006 21:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 09.10.2008 16:09
Сообщ.: 96, Visits: 874
Блин не закончились мои мучения с хранимыми процедурами.

Есть процедура:

CREATE PROCEDURE spLoginUser
@Username varchar,
@Password varchar,
@UserID int output
 AS
select @UserID=UserID from tblUsers where Username=@Username and [Password]=@Password
GO

Пытаюсь вызвать одну из них :spLoginUser 'esaravia','yoyo'
на что мне отвечают: Procedure 'spLoginUser' expects parameter '@UserID', which was not supplied.


 Почему он не воспринимает UserID как выходящий. Как базе данных ещё это объяснить.

Сообщ. #898916
15.06.2006 22:52
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421, Visits: 49 251
не воспринимает потому что его нет :-)

declare @UserID int output
exec spLoginUser 'esaravia','yoyo',@UserID
Сообщ. #898917
16.06.2006 9:34
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Все правильно, ты же не передаешь его, а значение по умолчанию не указано. Поэтоу или передавай арзумент явно:
declare @UserID int
exec spLoginUser 'esaravia','yoyo', @UserID out
или в объявлении процедуры напиши
CREATE PROCEDURE spLoginUser
@Username varchar,
@Password varchar,
@UserID int output = null
AS
...
Сообщ. #898928
17.06.2006 17:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 09.10.2008 16:09
Сообщ.: 96, Visits: 874
Ок, с помощью запроса получилось обратиться к процедуре. А как теперь из проги обратиться к процедуре. вопрос возник как раз из-за того что не получалось выполнить именно эту часть кода:

OleDbCommand objCmd=new OleDbCommand("spLoginUser",this.objConn);

objCmd.CommandType=CommandType.StoredProcedure;

OleDbParameter objParam=new OleDbParameter("@Username",OleDbType.VarChar);

objParam.Value=strUsername;

objCmd.Parameters.Add(objParam);

objParam=new OleDbParameter("@Password",OleDbType.VarChar);

objParam.Value=strPassword;

objCmd.Parameters.Add(objParam);

// try

// {

objConn.Open();

intID=(int)(objCmd.ExecuteScalar());// возвращает 0, чего по идее не должно быть

objConn.Close