How to: Retrieve Out Parameters and Return Value
This article is relevant to entity models that utilize the deprecated Visual Studio integration of Telerik Data Access. The current documentation of the Data Access framework is available here.
This topic provides an example of how to execute stored procedures with a return value and out parameters. In this tutorial:
- How to Retrieve Out Parameters
- How to Retrieve a Return Value
- How to Execute a Stored Procedure with a Return Value and Out Parameters
To run the samples in this topic, you need to use\import the System.Data, System.Data.Common and Telerik.OpenAccess.Data.Common namespaces.
Optionally, if the execution of the stored procedure is expected to take long time, you can set an appropriate value for the CommandTimeout property of spCommand. By default, it is the one specified in Runtime Configuration. If the command exceeds the timeout it will be terminated and a backend specific exception will be thrown.
For the examples in this topic, a Cars table like the one shown on the figure below will be used.
How to Retrieve Out Parameters
For this demo, the following stored procedure with out parameters will be used:
CREATE PROCEDURE GetCarModelAndMake
@CarId INT,
@CarModel varchar(50) OUTPUT,
@CarMake varchar(50) OUTPUT
AS
BEGIN
SELECT @CarModel = Model, @CarMake = Make
FROM Cars
WHERE CarID = @CarId
END
Suppose, you have created a domain model connected to the database containing that stored procedure. The following code snippet provides an example of how to execute the GetCarModelAndMake stored procedure and retrieve the out parameters.
private static void GetOutParametersFromStoredProcedure()
{
// 1. Create a new instance of the generated OpenAccessContext.
using ( EntitiesModel dbContext = new EntitiesModel() )
{
// 2. Get connection.
using ( IDbConnection dbConnection = dbContext.Connection )
{
// 3. Initialize and execute OACommand.
using ( IDbCommand spCommand = dbConnection.CreateCommand() )
{
spCommand.CommandText = "GetCarModelAndMake";
spCommand.CommandType = System.Data.CommandType.StoredProcedure;
// 4. Initialize parameters.
// 4.1. The 'CarId' parameter is IN parameter.
IDbDataParameter carIdParameter = spCommand.CreateParameter();
carIdParameter.ParameterName = "@CarId";
carIdParameter.Value = "1";
spCommand.Parameters.Add( carIdParameter );
// 4.2. The 'CarModel' parameter is OUT parameter.
IDbDataParameter carModelParameter = spCommand.CreateParameter();
carModelParameter.ParameterName = "@CarModel";
carModelParameter.Direction = System.Data.ParameterDirection.Output;
carModelParameter.DbType = System.Data.DbType.String;
carModelParameter.Size = 50;
spCommand.Parameters.Add( carModelParameter );
// 4.3. The 'CarMake' parameter is OUT parameter.
IDbDataParameter carMakeParameter = spCommand.CreateParameter();
carMakeParameter.ParameterName = "@CarMake";
carMakeParameter.Direction = System.Data.ParameterDirection.Output;
carMakeParameter.DbType = System.Data.DbType.String;
carMakeParameter.Size = 50;
spCommand.Parameters.Add( carMakeParameter );
spCommand.ExecuteNonQuery();
// 5. Consume the out parameters.
Console.WriteLine( carModelParameter.Value );
Console.WriteLine( carMakeParameter.Value );
}
}
}
}
Private Sub GetOutParametersFromStoredProcedure()
' 1. Create a new instance of the generated OpenAccessContext.
Using dbContext As New EntitiesModel()
' 2. Get connection.
Using dbConnection As IDbConnection = dbContext.Connection
' 3. Initialize and execute OACommand.
Using spCommand As IDbCommand = dbConnection.CreateCommand()
spCommand.CommandText = "GetCarModelAndMake"
spCommand.CommandType = System.Data.CommandType.StoredProcedure
' 4. Initialize parameters.
' 4.1. The 'CarId' parameter is IN parameter.
Dim carIdParameter As IDbDataParameter = spCommand.CreateParameter()
carIdParameter.ParameterName = "@CarId"
carIdParameter.Value = "1"
spCommand.Parameters.Add(carIdParameter)
' 4.2. The 'CarModel' parameter is OUT parameter.
Dim carModelParameter As IDbDataParameter = spCommand.CreateParameter()
carModelParameter.ParameterName = "@CarModel"
carModelParameter.Direction = System.Data.ParameterDirection.Output
carModelParameter.DbType = System.Data.DbType.String
carModelParameter.Size = 50
spCommand.Parameters.Add(carModelParameter)
' 4.3. The 'CarMake' parameter is OUT parameter.
Dim carMakeParameter As IDbDataParameter = spCommand.CreateParameter()
carMakeParameter.ParameterName = "@CarMake"
carMakeParameter.Direction = System.Data.ParameterDirection.Output
carMakeParameter.DbType = System.Data.DbType.String
carMakeParameter.Size = 50
spCommand.Parameters.Add(carMakeParameter)
spCommand.ExecuteNonQuery()
' 5. Consume the out parameters.
Console.WriteLine(carModelParameter.Value)
Console.WriteLine(carMakeParameter.Value)
End Using
End Using
End Using
End Sub
How to Retrieve a Return Value
For this demo, the following stored procedure with a return value will be used:
CREATE PROCEDURE GetCarYear
@CarId INT
AS
BEGIN
DECLARE @CarYear SMALLINT
SELECT @CarYear = CarYear
FROM Cars
WHERE CarID = @CarId
return @CarYear
END
Suppose, you have created a domain model connected to the database containing that stored procedure. The following code snippet demonstrates how to execute the stored procedure and retrieve the return value.
private static void GetReturnValueFromStoredProcedure()
{
// 1. Create a new instance of the generated OpenAccessContext.
using ( EntitiesModel dbContext = new EntitiesModel() )
{
// 2. Get connection.
using ( IDbConnection dbConnection = dbContext.Connection )
{
// 3. Initialize and execute OACommand.
using ( IDbCommand spCommand = dbConnection.CreateCommand() )
{
spCommand.CommandText = "GetCarYear";
spCommand.CommandType = System.Data.CommandType.StoredProcedure;
// 4. Initialize parameters.
// 4.1. The 'CarId' parameter is IN parameter.
IDbDataParameter carIdParameter = spCommand.CreateParameter();
carIdParameter.ParameterName = "@CarId";
carIdParameter.Value = "1";
// 4.2. This is the return value.
IDbDataParameter carYearParameter = spCommand.CreateParameter();
carYearParameter.Direction = ParameterDirection.ReturnValue;
spCommand.Parameters.Add( carIdParameter );
spCommand.Parameters.Add( carYearParameter );
spCommand.ExecuteNonQuery();
// 5. Consume the return value.
Console.WriteLine( carYearParameter.Value );
}
}
}
}
Private Sub GetReturnValueFromStoredProcedure()
' 1. Create a new instance of the generated OpenAccessContext.
Using dbContext As New EntitiesModel()
' 2. Get connection.
Using dbConnection As IDbConnection = dbContext.Connection
' 3. Initialize and execute OACommand.
Using spCommand As IDbCommand = dbConnection.CreateCommand()
spCommand.CommandText = "GetCarYear"
spCommand.CommandType = System.Data.CommandType.StoredProcedure
' 4. Initialize parameters.
' 4.1. The 'CarId' parameter is IN parameter.
Dim carIdParameter As IDbDataParameter = spCommand.CreateParameter()
carIdParameter.ParameterName = "@CarId"
carIdParameter.Value = "1"
' 4.2. This is the return value.
Dim carYearParameter As IDbDataParameter = spCommand.CreateParameter()
carYearParameter.Direction = ParameterDirection.ReturnValue
spCommand.Parameters.Add(carIdParameter)
spCommand.Parameters.Add(carYearParameter)
spCommand.ExecuteNonQuery()
' 5. Consume the return value.
Console.WriteLine(carYearParameter.Value)
End Using
End Using
End Using
End Sub
How to Execute a Stored Procedure with a Return Value and Out Parameters
The last example in this topic demonstrates how to execute a stored procedure mixing both, a return value and out parameters. For this demo, the following stored procedure will be used:
CREATE PROCEDURE GetCarInfo
@CarId INT,
@CarModel varchar(50) OUTPUT,
@CarMake varchar(50) OUTPUT
AS
BEGIN
DECLARE @CarYear SMALLINT
SELECT @CarModel = Model, @CarMake = Make, @CarYear = CarYear
FROM Cars
WHERE CarID = @CarId
return @CarYear
END
Suppose, you have created a domain model connected to the database containing that stored procedure. The following code snippet demonstrates how to execute the stored procedure, retrieve the return value and the out parameters.
private static void GetReturnValueAndOutParametersFromStoredProcedure()
{
// 1. Create a new instance of the generated OpenAccessContext.
using ( EntitiesModel dbContext = new EntitiesModel() )
{
// 2. Get connection.
using ( IDbConnection dbConnection = dbContext.Connection )
{
// 3. Initialize and execute OACommand.
using ( IDbCommand spCommand = dbConnection.CreateCommand() )
{
spCommand.CommandText = "GetCarInfo";
spCommand.CommandType = System.Data.CommandType.StoredProcedure;
// 4. Initialize parameters.
// 4.1. The 'CarId' parameter is IN parameter.
IDbDataParameter carIdParameter = spCommand.CreateParameter();
carIdParameter.ParameterName = "@CarId";
carIdParameter.Value = "1";
spCommand.Parameters.Add( carIdParameter );
// 4.2. The 'CarModel' parameter is OUT parameter.
IDbDataParameter carModelParameter = spCommand.CreateParameter();
carModelParameter.ParameterName = "@CarModel";
carModelParameter.Direction = System.Data.ParameterDirection.Output;
carModelParameter.DbType = System.Data.DbType.String;
carModelParameter.Size = 50;
spCommand.Parameters.Add( carModelParameter );
// 4.3. The 'CarMake' parameter is OUT parameter.
IDbDataParameter carMakeParameter = spCommand.CreateParameter();
carMakeParameter.ParameterName = "@CarMake";
carMakeParameter.Direction = System.Data.ParameterDirection.Output;
carMakeParameter.DbType = System.Data.DbType.String;
carMakeParameter.Size = 50;
spCommand.Parameters.Add( carMakeParameter );
// 4.4. This is the return value.
IDbDataParameter carYearParameter = spCommand.CreateParameter();
carYearParameter.Direction = ParameterDirection.ReturnValue;
spCommand.Parameters.Add( carYearParameter );
spCommand.ExecuteNonQuery();
// 5. Consume the out parameters and the return value.
Console.WriteLine( carModelParameter.Value );
Console.WriteLine( carMakeParameter.Value );
Console.WriteLine( carYearParameter.Value );
}
}
}
}
Private Sub GetReturnValueAndOutParametersFromStoredProcedure()
' 1. Create a new instance of the generated OpenAccessContext.
Using dbContext As New EntitiesModel()
' 2. Get connection.
Using dbConnection As IDbConnection = dbContext.Connection
' 3. Initialize and execute OACommand.
Using spCommand As IDbCommand = dbConnection.CreateCommand()
spCommand.CommandText = "GetCarInfo"
spCommand.CommandType = System.Data.CommandType.StoredProcedure
' 4. Initialize parameters.
' 4.1. The 'CarId' parameter is IN parameter.
Dim carIdParameter As IDbDataParameter = spCommand.CreateParameter()
carIdParameter.ParameterName = "@CarId"
carIdParameter.Value = "1"
spCommand.Parameters.Add(carIdParameter)
' 4.2. The 'CarModel' parameter is OUT parameter.
Dim carModelParameter As IDbDataParameter = spCommand.CreateParameter()
carModelParameter.ParameterName = "@CarModel"
carModelParameter.Direction = System.Data.ParameterDirection.Output
carModelParameter.DbType = System.Data.DbType.String
carModelParameter.Size = 50
spCommand.Parameters.Add(carModelParameter)
' 4.3. The 'CarMake' parameter is OUT parameter.
Dim carMakeParameter As IDbDataParameter = spCommand.CreateParameter()
carMakeParameter.ParameterName = "@CarMake"
carMakeParameter.Direction = System.Data.ParameterDirection.Output
carMakeParameter.DbType = System.Data.DbType.String
carMakeParameter.Size = 50
spCommand.Parameters.Add(carMakeParameter)
' 4.4. This is the return value.
Dim carYearParameter As IDbDataParameter = spCommand.CreateParameter()
carYearParameter.Direction = ParameterDirection.ReturnValue
spCommand.Parameters.Add(carYearParameter)
spCommand.ExecuteNonQuery()
' 5. Consume the out parameters and the return value.
Console.WriteLine(carModelParameter.Value)
Console.WriteLine(carMakeParameter.Value)
Console.WriteLine(carYearParameter.Value)
End Using
End Using
End Using
End Sub