Aufrufen einer gespeicherten Prozedur mit return-Wert
Ich bin versucht, eine gespeicherte Prozedur aufrufen, von meinem C# - windows-Anwendung. Die gespeicherte Prozedur ausgeführt wird, auf einer lokalen Instanz von SQL Server 2008. Ich bin in der Lage, rufen Sie die gespeicherte Prozedur, aber ich bin nicht in der Lage, um den Wert wieder aus der gespeicherten Prozedur. Diese gespeicherte Prozedur zurückgeben sollte, die nächste Nummer in der Sequenz. Ich habe getan, online-Forschung, und alle Seiten, die ich gesehen habe haben darauf hingewiesen, dass diese Lösung zu arbeiten.
Gespeicherte Prozedur code:
ALTER procedure [dbo].[usp_GetNewSeqVal]
@SeqName nvarchar(255)
as
begin
declare @NewSeqVal int
set NOCOUNT ON
update AllSequences
set @NewSeqVal = CurrVal = CurrVal+Incr
where SeqName = @SeqName
if @@rowcount = 0 begin
print 'Sequence does not exist'
return
end
return @NewSeqVal
end
Code ruft die gespeicherte Prozedur:
SqlConnection conn = new SqlConnection(getConnectionString());
conn.Open();
SqlCommand cmd = new SqlCommand(parameterStatement.getQuery(), conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter();
param = cmd.Parameters.Add("@SeqName", SqlDbType.NVarChar);
param.Direction = ParameterDirection.Input;
param.Value = "SeqName";
SqlDataReader reader = cmd.ExecuteReader();
Habe ich auch versucht, mit einer DataSet
zum abrufen der return-Wert mit dem gleichen Ergebnis. Was vermisse ich zu bekommen
der Rückgabewert von meinen gespeicherten Prozedur? Wenn mehr Informationen benötigt werden, lasst es mich bitte wissen.
InformationsquelleAutor Wesley | 2011-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Rückgabe-parameter zum Befehl:
@ReturnVal
an die Gespeicherte Prozedur als auch?Nein, Sie nicht hinzufügen, um den sp (der return-Anweisung löst die Füllung der parameter markiert mit ReturnValue)
danke, ich brauchte diese
Egal, was Sie nennen Sie die return-val-parameter, btw.
Die gespeicherte Prozedur Rückgabewert sollte nur verwendet werden, um anzuzeigen, Erfolg (null) oder Fehler/Warnung (nicht-null), die keine Daten zurückgeben. Verwenden Sie ein
OUTPUT
parameter oder Ergebnis-set für diesen Zweck.InformationsquelleAutor Alex Aza
ExecuteScalar() funktioniert, aber ein output-parameter wäre eine bessere Lösung.
InformationsquelleAutor Justin Dearing
Ich weiß, das ist alt, aber ich stolperte über es mit Google.
Wenn Sie einen Rückgabewert in der gespeicherten Prozedur, sagen Sie "nimm 1" - nicht mit output-Parametern.
Können Sie das folgende tun - "@RETURN_VALUE" wird automatisch Hinzugefügt, um jedes command-Objekt. KEINE NOTWENDIGKEIT, EXPLIZIT HINZUFÜGEN
Ich glaube nicht, dass die cmd-Instanz einen parameter namens in RETURN_VALUE in der SqlParameterCollection, es sei denn, es ist explizit Hinzugefügt. Deshalb, wenn Sie erwägen, die Einnahme der Ansatz oberhalb von Gary, dann stellen Sie Hinzugefügt haben, cmd.Parameter.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int)); cmd.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue; Allerdings glaube ich, dass Sie NICHT zu fügen Sie die @RETURN_VALUE, die definition der gespeicherten Prozedur. Vielleicht ist das, was Gary meinte.
InformationsquelleAutor Gary
Version von EnterpriseLibrary auf meinem Rechner hatte andere Parameter.
Das war Arbeit:
InformationsquelleAutor RaSor
Können Sie versuchen, mit einem output-parameter. http://msdn.microsoft.com/en-us/library/ms378108.aspx
InformationsquelleAutor Aravind
Ich hatte ein ähnliches problem mit der SP-Aufruf einen Fehler, dass ein erwarteter parameter nicht enthalten war. Mein code lautete wie folgt.
Gespeicherte Prozedur:
Und C#:
Bei der Fehlersuche erkannte ich, dass die gespeicherte Prozedur war EIGENTLICH auf der Suche nach einer Richtung, die von "InputOutput", so die folgende änderung das problem behoben.
InformationsquelleAutor Paul
Oder wenn Sie EnterpriseLibrary eher als standard ADO.NET...
InformationsquelleAutor Dunc
Sehe ich das andere geschlossen ist. Also im Grunde hier ist die grobe meinem code. Ich denke, Sie sind fehlt die Zeichenfolge cmd ein Kommentar. Zum Beispiel, wenn meine Speicher-Prozedur aufrufen:DBO.Test. Ich würde schreiben müssen " cmd="DBO.testen". Führen Sie dann den Befehl geben, die gleich Prozedur speichern, und bla bla bla
InformationsquelleAutor Rain