Here's a handy way to execute a stored proc and get both the return value and any datatables.
public int ExecStoredProcedure(string procName, out DataSet dataSet, params SqlParameter[] parameters)
{
// Prepare the stored proc execution
using (SqlCommand cmd = new SqlCommand(procName, _dbConnection, _transaction))
{
cmd.CommandType = CommandType.StoredProcedure;
// Add regular parameters (in, out, inout)
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
}
// Add return value parameter
SqlParameter retValParam = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int);
retValParam.Direction = ParameterDirection.ReturnValue;
// Execute the proc
dataSet = new DataSet();
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd))
{
dataAdapter.Fill(dataSet);
}
// Extract the return value
return (int)retValParam.Value;
}
}