2016-05-22 11 views
0

Ich habe eine SP, die Integer-Wert zurückgibt. Der SP hat keine Rückgabevariable definiert und gibt direkt den Wert für z. -1 zurück, Rückkehr -2Wie erhalten Rückgabewert von Stored Procedure

Ich habe versucht, den folgenden Code, aber es gibt Ausnahme:

-Code

AseParameter retval = cmd.Parameters.Add ("@ RETURN_VALUE", SqlDbType .Int); retval.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery(); // Diese Zeile wirft Ausnahme

Exception

NotSupportException

bindParameter - Int

Wie Rückgabewert lesen?

EDIT

Stored Procedure

IF OBJECT_ID('dbo.MySP') IS NOT NULL 
BEGIN 
    DROP PROCEDURE dbo.MySP 
    IF OBJECT_ID('dbo.MySP') IS NOT NULL 
     PRINT '<<< FAILED DROPPING PROCEDURE dbo.MySP >>>' 
    ELSE 
     PRINT '<<< DROPPED PROCEDURE dbo.MySP >>>' 
END 
go 
create procedure MySP 

    @param1   char(60), 
    @param2   char(3), 
    @param3   int, 
    @param4   char(4) 
as 
declare 
    @somefield1   char(1), 
    @somefield2   datetime, 

    If @param1 is null 
     return -1 

    If @param2 != "L" 
     return -2 

more code here..... 
+0

Haben Sie versucht, einen Wert festzulegen? _AseParameter retval = cmd.Parameters.Add ("@ RETURN_VALUE", SqlDbType.Int) .Wert = 0; _ – Steve

+0

Fehlermeldung "Objekt 'Objekt' kann nicht implizit in 'Sybase.Data.AseClient.AseParameter' umgewandelt werden. Eine explizite Konvertierung ist vorhanden (Vermissen Sie eine Besetzung?) –

+0

Könnten Sie den SP-Code und mehr Code zum Ausführen des oben hinzugefügten SP? –

Antwort

0

Klingt wie Sie einen SqlDataReader müssen, da Sie wieder einen Wert zu erhalten, sind der Hoffnung.

This question hat den Code bereits für Sie geschrieben. Nur Bedürfnisse angepasst an Ihren Fall. Es gibt auch ein paar gute Links zu einigen ziemlich anständigen Lernmaterialien.

0

Mit folgendem Code wurde das Problem behoben. Ich erkannte, dass ich SqlDbType.Int übergeben, wenn dies tatsächlich Sybase-Datenbank ist.

AseParameter retval = neuer AseParameter ("@ RETURN_VALUE", AseDbType.Integer); cmd.Parameters.Add (retval); retval.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); Rückgabewert (int) cmd.Parameters ["@ RETURN_VALUE"]. Wert;