|
|
|
Supreme 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
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Все правильно. Используй varchar(8000) вместо text или возвращай данные не как output параметры, а в виде таблицы. Или переходи на sql2005 где есть новый тип данных varсhar(max).
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833,
Visits: 16 863
|
|
| В 2005 в OUTPUT парамерах можно использовать не только varchar(max), но и text.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Alexey Spirin (12.06.2006) В 2005 в OUTPUT парамерах можно использовать не только varchar(max), но и text.
Еще один плюс в пользу перехода на него :)
|
|
|
|
|
Supreme Being
      
участник
Last Login: 09.10.2008 16:09
Сообщ.: 96,
Visits: 874
|
|
| Спасибо за совет, все получилось.
|
|
|
|
|
Supreme 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 как выходящий. Как базе данных ещё это объяснить.
|
|
|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
не воспринимает потому что его нет :-)
declare @UserID int output
exec spLoginUser 'esaravia','yoyo',@UserID
|
|
|
|
|
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
...
|
|
|
|
|
Supreme 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 | | | |