I eine einfache gespeicherte Prozedur, die den type_id (int) als Ausgabeparameter zurück unter Verwendung des type_name (VARCHAR (100)) als Eingangsparameter. Wenn ich die gespeicherte Prozedur in SqlServer ausführe, funktioniert es einwandfrei und gibt das entsprechende type_id zurück.ExecuteScalar gibt nichts aus gespeicherten Prozedur
CREATE PROCEDURE [dbo].[intake_types_select_by_type_name]
@type_name varchar(100),
@type_id integer OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON
SELECT @type_id = type_id
FROM intake_types
WHERE type_name = @type_name
END
Allerdings, wenn ich die gespeicherte Prozedur aus einer Funktion in Visual Studio rufen Sie den Parameter @type_id kehrt Nichts.
Ich habe stundenlang im Internet nach einer Lösung gesucht und nichts gefunden, was hilft. Ich habe eine ähnliche gespeicherte Prozedur und Funktion in einem anderen Projekt, das die gleiche Codierung und Logik verwendet und es funktioniert gut (jedoch gibt es varchar als OUTPUT-Parameter). Ich habe diese beiden Projekte verglichen, um zu sehen, ob mir etwas Einfaches fehlt, aber keine Freude.
Haben Sie versucht, 'Dim result = sp.ExecuteScalar()'? – Fabio
Jedes Beispiel, das ich gesehen habe, macht etwas wie 'TypeID = (Int32) sp.ExecuteScalar()'. Bist du sicher, dass du in deinem anderen Projekt einfach einen nackten Aufruf an 'sp.ExecuteScalar()' machst? –
Entfernen Sie '.Item (" @ type_id "). Direction = ParameterDirection.Output', ändern Sie' .Add ("@ type_id", SqlDbType.Int) 'in' .Add ("@ type_id", SqlDbType.Int, ParameterDirection. Output) ', und ändern Sie' ExecuteScalar' in 'ExecuteNonQuery()'. Ich weiß nicht, ob es dein Problem lösen wird, aber es ist einen Versuch wert. –