Не удается вернуть значение varchar из хранимой процедуры в asp.net - PullRequest
0 голосов
/ 12 ноября 2010

Я пытаюсь вернуть varchar из хранимой процедуры с помощью следующего кода:

Dim uname As SqlCommand = New SqlCommand("userName", uconnect)
uname.CommandType = CommandType.StoredProcedure
Dim outVal As SqlParameter = uname.Parameters.Add("userName", SqlDbType.VarChar)
uname.Parameters.AddWithValue("userID", userLog)
uname.Parameters.AddWithValue("@userName", " ")
outVal.Direction = ParameterDirection.Output
uname.ExecuteReader() 'This line trows exception saying: 
' "String[1]: the Size property has an invalid size of 0."

uconnect.Close()
Dim name As String = outVal.Value

Вот код SP:

ALTER PROCEDURE [dbo].[userName] 
 -- Add the parameters for the stored procedure here
 @userID int,
 @userName varchar(30) OUTPUT
AS
   SELECT @userName = owner FROM users WHERE user_id = @userID

Я также попытался установить размер возвращаемого параметра varchar следующим образом:

uname.Parameters.Add ("userName", SqlDbType.VarChar, 30 )

но если я добавлю параметр размера в строку выше, когда я запускаю программу, она выдает новое исключение, говорящее: «Хранимая процедура UserName имеет слишком много заданных аргументов».

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

SqlParameter.Add имеет ряд перегрузок, но вам нужно использовать в этой ситуации форму, которую вы пробовали с размером столбца:

uname.Parameters.Add("userName", SqlDbType.VarChar, 30)

Ошибка, которую выЭто происходит потому, что вы объявили параметр userName дважды - один раз как userName и снова как @userName - это приводит к отправке трех параметров на Sql Server, когда ваша хранимая процедура принимает только два.Уберите эту строку и все будет хорошо:

' Remove this line
uname.Parameters.AddWithValue("@userName", " ")
0 голосов
/ 12 ноября 2010

Если ваш код действительно такой простой, то, вероятно, проще просто выбрать результат и выполнить скаляр.

Dim uname As SqlCommand = New SqlCommand("userName", uconnect)
uname.CommandType = CommandType.StoredProcedure
uname.Parameters.AddWithValue("userID", userLog)

Dim name As String
name = uname.ExecuteScalar()
uconnect.Close()

С таким звездочкой:

ALTER PROCEDURE [dbo].[userName] 
 -- Add the parameters for the stored procedure here
 @userID int,
AS
   SELECT owner FROM users WHERE user_id = @userID

Примечание: я программист на c #, извините, если это не идеально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...