OUTPUT Parameters
Hi everybody
I have a Stored procedure(SyBase 12.5) that returns a OUTPUT value, but it always returns a DBNull. I test the SP in other application (DBArtisan like a Query Analizer) and it returns the correct value, but when I test in my NET application (made in C#) it returns DBNull. If I try to make a cast I get the exception "Object cannot be cast from DBNull to other types"
This is my code my SP:
CREATE PROCEDURE dbo.sp_Prueba(
@vsTransId char(4),
@vsContratoId varchar(4),
@vsLoginUser varchar(40),
@vsParamList varchar(200),
@iResp int OUTPUT
)
AS
Declare @iError int
Declare @OK int
BEGIN
Select @iError = 0
Select @OK = 0
BEGIN TRAN Pruebas
Insert into LogTransacc
Values (@vsTransId,@vsContratoId,@vsLoginUser,"Pruebas Juan",@vsParamList,"Ini",getdate())
Select @iError = @@error
if(@iError = @OK)
Begin
Select @iResp = @OK
COMMIT TRAN Pruebas
End
else
Begin
Select @iResp = @iError
ROLLBACK TRAN Pruebas
End
END
And this my function:
private void Insertar() {
string strcadena = cadenaConn;
OleDbConnection oleConn = null;
try {
oleConn = new OleDbConnection(strcadena);
oleConn.Open();
OleDbCommand oleCmmd = new OleDbCommand();
oleCmmd.CommandType = CommandType.StoredProcedure;
oleCmmd.Connection = oleConn;
oleCmmd.CommandText = "sp_Prueba";
oleCmmd.Parameters.Add("@vsTransId",OleDbType.Char ,4);
oleCmmd.Parameters["@vsTransId"].Value = "9500";
oleCmmd.Parameters.Add("@vsContratoId",OleDbType.V arChar,4);
oleCmmd.Parameters["@vsContratoId"].Value = "0000";
oleCmmd.Parameters.Add("@vsLoginUser",OleDbType.Va rChar,40);
oleCmmd.Parameters["@vsLoginUser"].Value = "Juan Carlos Gonzalez";
oleCmmd.Parameters.Add("@vsParamList",OleDbType.Va rChar,200);
oleCmmd.Parameters["@vsParamList"].Value = "Esta es una prueba para insertar utilizando Threads";
oleCmmd.Parameters.Add("@iResp", OleDbType.Integer);
oleCmmd.Parameters["@iResp"].Direction = ParameterDirection.Output;
oleCmmd.ExecuteNonQuery();
if(oleCmmd.Parameters["@iResp"].Value.Equals(System.DBNull.Value))
MessageBox.Show("OUTPUT Null");
else
MessageBox.Show("OUTPUT Not null");
oleCmmd.Dispose();
}
catch(Exception Ex) {
Console.WriteLine(Ex.Message);
}
finally {
if(oleConn != null) {
if(oleConn.State != System.Data.ConnectionState.Closed)
oleConn.Close();
}
}
}
Does someone help me, please?
Regards
J.C.
|