2014-10-31 3 views
5

Я довольно новичок в C#, и я пытаюсь настроить вызов хранимой процедуры в моей базе данных, которая принимает один параметр.C# Сохраненная процедура или функция ожидает параметр, который не указан

Я получаю ошибку «Процедура или функция„SP_getName“ожидает параметр„@Username“, который не поставлялся.»

Моя Хранимая процедура работает нормально, когда я поставить его с параметром и я запустить его с помощью SQL студия управления.

GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[SP_getName] 
    @username = 'bob101' 

SELECT 'Return Value' = @return_value 

GO 

Однако, когда я пытаюсь и назвать это ошибка с тем, как я передаю параметр в, но я не могу определить, что проблема есть.

  //create a sql command object to hold the results of the query 
      SqlCommand cmd = new SqlCommand(); 

      //and a reader to process the results 
      SqlDataReader reader; 

      //Instantiate return string 
      string returnValue = null; 

      //execute the stored procedure to return the results 
      cmd.CommandText = "SP_getName"; 

      //set up the parameters for the stored procedure 
      cmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = "bob101"; 

      cmd.CommandType = CommandType.Text; 
      cmd.Connection = this.Connection; 

      // then call the reader to process the results 
      reader = cmd.ExecuteReader(); 

Любая помощь в определении моей ошибки будет принята с благодарностью!

Я также попытался смотреть на эти две должности, но я не везло:

Stored procedure or function expects parameter which is not supplied

Procedure or function expects parameter, which was not supplied

Спасибо!

+0

BTW, вы не должны использовать SP_ в качестве префикса для своих процедур. Это зарезервировано для системных процессов. Если MS выпускает прок с тем же именем в какой-то момент, ваша версия больше не будет работать. Честно говоря, вы не должны использовать префикс вообще, они ничего не добавляют для ясности. –

ответ

13

Вы заявили:

cmd.CommandType = CommandType.Text; 

Поэтому вы просто выполнение:

SP_getName 

Который работает, потому что это первое заявление в пакете , поэтому вы можете вызывать процедуру без EXECUTE, но вы на самом деле не включаете ng параметр. Измените его на

cmd.CommandType = CommandType.StoredProcedure; 

Или вы можете изменить CommandText на:

EXECUTE SP_getName @username; 

В качестве примечания следует Avoid using the prefix 'sp_' for your stored procedures

И еще ремарка будет использовать using с объектами IDisposable для чтобы они были утилизированы правильно:

using (var connection = new SqlConnection("ConnectionString")) 
using (var cmd = new new SqlCommand("SP_getName", connection)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = "bob101"; 
    connection.Open(); 
    using (var reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      // Do something 
     } 
    } 
} 
+0

Brilliant - спасибо за информацию, отлично поработал! Отметьте как ответ, когда истечет срок! : D – hlh3406

+0

Спасибо - обязательно переименуйте мою хранимую процедуру и прочитайте на 'using'! – hlh3406

+0

Спасибо! было полезно – iTSrAVIE

0

Попробуйте удалить @:

cmd.Parameters.Add("username", SqlDbType.NVarChar).Value = "bob101"; 
+0

Привет, к сожалению, я до сих пор получаю сообщение об ошибке: «Процедура или функция« SP_getName »ожидает параметр« @username », который не был поставлен.» – hlh3406

0

I ha d эта проблема, но речь шла не о имени параметра Command Type. Моя проблема заключалась в том, что, когда C# требует SP, для каждого параметра, который «по умолчанию» никакой ценности проходит ключевое слово (я нашел его в SQL Profiler):

... @IsStop=0,@StopEndDate=default,@Satellite=0, ... 

в моем случае мой параметр Тип был DateTime:

@StopEndDate datetime 

.Я решил свою проблему, установив значение по умолчанию для этого параметра в Хранимой процедуре:

@StopEndDate datetime=null 
+0

(исправление в первой строке моего ответа) имя параметра или тип команды – Javad

Смежные вопросы