Вызов хранимых процедур из VB.NET

#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», менукод)