2014-10-31 29 views
5

Jestem całkiem nowy w C# i próbuję ustawić wywołanie procedury przechowywanej w mojej bazie danych, która przyjmuje jeden parametr.C# Zapisana procedura lub funkcja oczekuje parametru, który nie jest dostarczany

otrzymuję błąd „Procedura lub funkcja«SP_getName»oczekuje parametr«@username», który nie został dostarczony.”

Moje procedura składowana działa ok, kiedy dostarczamy go z parametrem i uruchomić go za pomocą SQL studio zarządzania.

GO 

DECLARE @return_value int 

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

SELECT 'Return Value' = @return_value 

GO 

Jednak gdy próbuję go wywołać, to błąd związany jest z tym, jak przekazuję ten parametr, ale nie mogę stwierdzić, na czym polega problem.

  //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(); 

Każda pomoc w wykryciu mojego błędu byłaby bardzo ceniona!

Próbowałem zostały również patrząc na tych dwóch stanowisk, ale nie miałem szczęścia:

Stored procedure or function expects parameter which is not supplied

Procedure or function expects parameter, which was not supplied

Dzięki!

+0

BTW, nie powinieneś używać SP_ jako przedrostka do twoich procedur. Jest to zarezerwowane dla systemowych proc. Jeśli MS zwolni procę o tej samej nazwie w pewnym momencie, twoja nie będzie już działać. Szczerze mówiąc nie powinieneś używać prefiksu, nie dodają nic do jasności. –

Odpowiedz

13

pan stwierdził:

cmd.CommandType = CommandType.Text; 

Dlatego jesteś po prostu wykonanie:

SP_getName 

Który działa, ponieważ jest to pierwsze oświadczenie w partii , więc możesz zadzwonić do procedury bez EXECUTE, ale tak naprawdę nie jesteś w rzeczywistości ng parametru. Zmień go

cmd.CommandType = CommandType.StoredProcedure; 

Albo można zmienić CommandText do:

EXECUTE SP_getName @username; 

Jako marginesie należy Avoid using the prefix 'sp_' for your stored procedures

a dalsze dygresja byłoby użyć using z IDisposable sprzeciwia się upewnij się, że są one utylizowane poprawnie:

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 - dzięki za informację, działało świetnie! Oznaczymy jako odpowiedź, gdy limit czasu się skończy! : D – hlh3406

+0

Dzięki - zdecydowanie zmieni nazwę mojej procedury przechowywanej i przeczytasz na "użyciu"! – hlh3406

+0

Dzięki! był pomocny – iTSrAVIE

0

Spróbuj usunąć @:

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

Witam, niestety nadal dostaję komunikat o błędzie: "Procedura lub funkcja" SP_getName "oczekuje parametru" @ nazwa_użytkownika ", który nie został dostarczony." – hlh3406

0

Ja ha W tym problemie, ale nie chodziło o nazwę parametru typu komendy. Moim problemem było to, że gdy C# zwraca SP, dla każdego parametru, który ma 'default' no przechodzi wartość słowa kluczowego (znalazłem go w SQL Profiler):

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

w moim przypadku mój parametr Type był DateTime:

@StopEndDate datetime 

.Rozwiązałem problem poprzez ustawienie domyślnej wartości tego parametru w procedurze zapisanej:

@StopEndDate datetime=null 
+0

(korekta w pierwszym wierszu mojej odpowiedzi) nazwa parametru lub Typ polecenia – Javad

Powiązane problemy