2016-08-12 2 views
0

Я пытаюсь выполнить хранимую процедуру и распечатать вывод, но когда я запускаю код ниже, я получаю ошибку, например: «Процедура или функция« SPInsertLocal »ожидает параметр« @RES », который не был указан».«Процедура или функция ожидает параметра, который не был указан».

private void InsertPdtLocal(string code, string PON,string Qty) 
     { 
      string str = Properties.Settings.Default.conLocal; 
      SqlConnection con = new SqlConnection(str); 
      SqlCommand cmd = new SqlCommand("Execute SPInsertLocal @PON,@TCode,@Qty,@Type", con); 
      try 
      { 
       con.Open(); 
       cmd.CommandTimeout = 150; 
       cmd.Parameters.AddWithValue("@PON", PON); 
       cmd.Parameters.AddWithValue("@Qty", Qty); 
       cmd.Parameters.AddWithValue("@TCode", code); 
       cmd.Parameters.AddWithValue("@Type", Globals.s_type); 
       SqlParameter output = new SqlParameter("@RES", SqlDbType.Int); 
       output.Direction = ParameterDirection.Output; 
       cmd.Parameters.Add(output); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
       int id = Convert.ToInt32(output.Value); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

Что я здесь делаю неправильно?

+4

Ваш SQLCommand не содержит @RES. Также вы можете просто использовать новый SqlCommand («SPInsertLocal», con), а затем указать CommandType = CommandType.StoredProcedure; –

+1

Возможно, вы должны использовать операторы using, а SQLCommand реализует IDisposible –

ответ

1
SqlCommand cmd = new SqlCommand("Execute SPInsertLocal @PON,@TCode,@Qty,@Type,@RES", con); 

Я не проходил параметр, исправили проблему

0

Вы можете реорганизовать код следующим образом, где используя оператор используется для автоматического управления закрытием соединения и избежать жесткого кодирования Выполнить заявление в C# код, который является плохой практикой

private void InsertPdtLocal(string code, string PON,string Qty) 
     { 
      string str = Properties.Settings.Default.conLocal; 
      try 
      { 

      using (SqlConnection con = new SqlConnection(str)) 
      { 
       using (SqlCommand cmd = con.CreateCommand()) 
       { 
        cmd.Parameters.AddWithValue("@PON", PON); 
        cmd.Parameters.AddWithValue("@Qty", Qty); 
        cmd.Parameters.AddWithValue("@TCode", code); 
        cmd.Parameters.AddWithValue("@Type", Globals.s_type); 
        var output = cmd.Parameters.Add("@RES" , SqlDbType.Int); 
        output.Direction = ParameterDirection.Output; 
        cmd.ExecuteNonQuery(); 
        int id = Convert.ToInt32(output.Value); 
       } 
      } 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
Смежные вопросы