Ich schaute durch Stackoverflow und gefunden fast identisch question here. Es wurde vor einem Jahr gefragt und niemand hat es schon beantwortet. Vielleicht bin ich glücklicher als user1038334 und jemand wird mir helfen.SQL-CLR gespeicherte Prozedur gibt keinen Wert
Ich habe eine SQL CLR gespeicherte Prozedur, die für Tage funktioniert, bis etwas Seltsames passiert. Mein gespeicherter Prozess aktualisiert Tabellen und gibt einen Wert als Ergebniscode zurück. Wenn ich diesen Wert betrachte, kann ich entscheiden, ob etwas schiefgelaufen ist. Das Problem besteht darin, diesen Ergebniswert zu erhalten. C# -Code löst eine Ausnahme aus, wenn ein Rückgabewert empfangen wird.
var returnValue = new SqlParameter {Direction = ParameterDirection.ReturnValue};
command.Parameters.Add(returnValue);
connection.Open();
command.ExecuteNonQuery();
return (int)returnValue.Value; //<-- here is an exception
Und das Lustigste daran ist, dass, wenn ich SQL Profiler zu verbinden, um die Abfrage fangen und dann diese Abfrage ausführen, innerhalb von SQL Server Management Studio kann ich immer noch einen Ergebniswert ohne Probleme erhalten:
DECLARE @RC INT
EXECUTE @RC = MyClrStoreProc
SELECT @RC
Sobald ich die CLR-Assembly erneut publiziere oder SQL Server neu starte, wird alles behoben.
Ich bin ziemlich sicher, dass es einen Grund für solch seltsames Verhalten geben sollte, aber ich kann nicht finden.
SQL Server-Version: Microsoft SQL Server Developer Edition (64-bit) - v.10.50.1765.0
Host-OS-Version: Microsoft Windows NT 6.1 (7601)
.Net Version: v4.0.30319
Jede Hilfe würde sehr geschätzt werden.
Wofür wurde command.CommandType festgelegt? – AdaTheDev
Können Sie es reproduzieren, wenn Sie [sp_recompile] (http://support.microsoft.com/kb/2536225) ausführen? –
@AdaTheDev: Mein Befehlstyp ist auf CommandType.StoredProcedure festgelegt. – davidoff