#vb.net
#vb.net
Вопрос:
Может ли кто-нибудь, пожалуйста, помочь мне в следующем:
Я создал хранимую процедуру SQL Server следующим образом:
create procedure prcGet_sub_menu_list
@sub_menu char(5)
as
begin
select
'menu_code' = menu_code
'menu_name' = menu_name
from sub_menu_master
where menu_code = @sub_menu
end
return
Теперь я вызываю эту процедуру из VB.NET , но я получаю ошибку типа ‘Хранимая процедура prcGet_sub_menu_list ожидает параметр @sub_menu, который не был указан’. Пожалуйста, помогите мне в том же. Код, который у меня есть в VB.NET заключается в следующем:
Imports System.Data
Imports System.Data.SqlClient
Dim sqlConn as New SqlClient.SqlConnection
sqlConn.ConnectionString = "........"
sqlConn.Open()
Dim menuCode as string
menuCode = cboDetails.selectedItem
Dim sqlCmd as New SqlCommand
sqlCmd.Connection = Connection.sqlConn
sqlCmd.CommandType = CommandType.StoredProcedure
sqlCmd.CommandText = "prcGet_sub_menu_list"
sqlCmd.Parameter.Add("menuCode", SqlDbType.Char)
Dim sqlDA as New SqlDataAdapter()
sqlDA.SelectCommand = sqlCmd
Dim sqlDT as New DataTable
sqlDA.Fill(sqlDT)
Это код, который я написал, и он выдает мне ошибку:
‘Хранимая процедура prcGet_sub_menu_list ожидает параметр @sub_menu, который не был предоставлен’.
Пожалуйста, дайте мне некоторую помощь по тому же вопросу.
С уважением, Джордж
Ответ №1:
Вы должны указать то же имя и тип параметра, что и в вашей хранимой процедуре.
sqlCmd.Parameters.Add(New SqlParameter("@sub_menu", SqlDbType.Char, 5)).Value = "Joe"
Гита.
Комментарии:
1. Дорогая Гита, большое спасибо за ответ. Я попробовал то же самое, и это работает, но вместо значения «Joe», которое вы указали, когда я передаю туда переменную, это не работает и выдает мне ошибку. Я дал инструкцию, подобную sqlCmd.Parameters. Добавить(Новый параметр SqlParameter(«@menu_code», SqlDbType. Символ, 5)). Значение = menuCode. Пожалуйста, помогите с тем же.
2. Процедура или функция ‘prc_test’ ожидает параметр ‘@menu_code’, который не был предоставлен. Это код ошибки. Я не получаю эту ошибку, когда передаю значение как .value = «MENU1», и оно отлично работает, выдавая мне правильный вывод, но не когда я передаю переменную. Пожалуйста, дайте совет. Спасибо.
3. Да, это имеет значение. Не имею ни малейшего представления о том, почему отображается ошибка такого рода.
4. Попробуйте это, изменив тип данных в хранимой процедуре и в sqldbtype как varchar / nvarchar.
5. Уважаемая Гита, извините, переменная не имела значения, и это стало причиной ошибки. Теперь это работает нормально, и большое спасибо за оказанную помощь и поддержку.
Ответ №2:
Как следует из сообщения, вы должны добавить параметр с именем «sub_menu» таким же образом, как вы добавляете параметр «menuCode». Вероятно, вам также следует присвоить ему значение:
sqlCmd.Parameter.Add("sub_menu", SqlDbType.Char).Value = "Blah"
(Конечно, я не знаю, какой правильный тип, поэтому Char — это просто пример.)
Комментарии:
1. Уважаемый Евгений, Спасибо за ответ. Я попробовал то же самое, и это работает, когда в конце задается значение, подобное . значение = «MENU1», но когда я передаю туда переменную, она не работает и выдает мне ошибку. Я дал инструкцию, подобную sqlCmd.Parameters. Добавить(Новый параметр SqlParameter(«@menu_code», SqlDbType. Символ, 5)). Значение = menuCode. Пожалуйста, помогите с тем же.
Ответ №3:
Вам нужно использовать правильное имя параметра
Что-то вроде
sqlCmd.Parameter.Add("@sub_menu", SqlDbType.Char)
И присваиваем им значение
Что-то вроде
sqlCmd.Parameters("@sub_menu").Value = val
Взгляните на SqlCommand.Свойство параметров
и, возможно, Урок 07: Использование хранимых процедур
Ответ №4:
Пара вещей. Параметр должен быть Parameters. Также sqlCmd.Parameters.Add устарел, поэтому используйте sqlCmd.Parameters.AddWithValue:
sqlCmd.Параметры.AddWithValue(«menuCode», менукод)