2014-10-31 23 views
5

Sono relativamente nuovo a C# e sto provando a impostare la chiamata a una stored procedure nel mio database che accetta un parametro.C# La procedura memorizzata o la funzione prevede parametri non forniti

ottengo l'errore "Procedura o funzione 'SP_getName' aspetta parametro '@username', che non è stato fornito."

mio stored procedure funziona bene quando fornisco con il parametro e lo eseguo tramite SQL studio di gestione.

GO 

DECLARE @return_value int 

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

SELECT 'Return Value' = @return_value 

GO 

Tuttavia quando provo e lo chiamo l'errore è di come sto passando il parametro in, ma non riesco a individuare qual è il problema.

Qualsiasi aiuto per individuare il mio errore sarebbe molto apprezzato!

Ho anche provato guardando questi due posti, ma non ho avuto fortuna:

Stored procedure or function expects parameter which is not supplied

Procedure or function expects parameter, which was not supplied

Grazie!

+0

BTW, non utilizzare SP_ come prefisso per le procedure. Questo è riservato ai proc del sistema. Se MS rilascia un proc con lo stesso nome, a un certo punto il tuo non verrà più eseguito. Onestamente non dovresti usare un prefisso, non aggiungono nulla per chiarezza. –

risposta

13

Hai dichiarato:

cmd.CommandType = CommandType.Text; 

Pertanto si sta semplicemente eseguendo:

SP_getName 

che funziona perché è la prima istruzione del batch , quindi puoi chiamare la procedura senza EXECUTE, ma in realtà non sei incluso ng il parametro. Cambiarlo in

cmd.CommandType = CommandType.StoredProcedure; 

Oppure si può cambiare la vostra CommandText a:

EXECUTE SP_getName @username; 

Come un lato nota si dovrebbe Avoid using the prefix 'sp_' for your stored procedures

E un ulteriore nota a margine sarebbe quello di utilizzare using con IDisposable oggetti di assicurarsi che siano smaltiti correttamente:

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

Brillante: grazie per l'informazione, ha funzionato alla grande! Segnerà come risposta quando il limite di tempo è scaduto! : D – hlh3406

+0

Grazie - rinominerà definitivamente la mia stored procedure e leggerò su 'using'! – hlh3406

+0

Grazie! era utile – iTSrAVIE

0

Prova rimuovere @:

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

Salve, sfortunatamente continuo a ricevere il messaggio di errore: "La procedura o la funzione 'SP_getName' si aspetta il parametro '@nomeutente', che non è stato fornito." – hlh3406

0

I ha d questo problema, ma non si trattava del nome del parametro del tipo di comando. Il mio problema era che quando C# richiede SP, per ogni parametro che si e 'default' alcun valore passa parola chiave (ho trovato in SQL Profiler):

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

nel mio caso il mio parametro Type è stato DateTime:

@StopEndDate datetime 

.Ho risolto il problema impostando il valore predefinito su questo parametro in Stored procedure:

@StopEndDate datetime=null 
+0

(correzionein prima riga della mia risposta) nome parametro o tipo di comando – Javad