private static bool ExecuteProcedure(string procedureName, string[] inputParameters, string[] outputParameters, bool poolingStatus = true)
{
using (var fbConnection = new FbConnection(ConnectionString()))
using (var fbCommand = new FbCommand(procedureName, fbConnection))
try
{
Cursor.Current = Cursors.WaitCursor;
fbCommand.CommandType = CommandType.StoredProcedure;
//INPUT PARAMETERS
for (var i = 0; i < inputParameters.Length; i++)
fbCommand.Parameters.Add("@" + i, inputParameters[i]).Direction = ParameterDirection.Input;
//OUTPUT PARAMETERS
for (var i = inputParameters.Length; i < inputParameters.Length + outputParameters.Length; i++)
fbCommand.Parameters.Add("@" + i, FbDbType.VarChar).Direction = ParameterDirection.Output;
//OPEN CONNECTION
fbConnection.Open();
//EXECUTE PROCEDURE
_ = fbCommand.ExecuteNonQuery();
//GET OUTPUT PARAMETERS
for (var i = inputParameters.Length; i < inputParameters.Length + outputParameters.Length; i++)
outputParameters[i - inputParameters.Length] = fbCommand.Parameters["@" + i].Value.ToString();
NotifyReconnection();
Utility.Log("EP", procedureName);
return true;
}
catch (FbException ex)
{
if (poolingStatus)
return ExecuteProcedure(procedureName, inputParameters, outputParameters, false);
else NotifyException(ex);
return false;
}
finally
{
Cursor.Current = Cursors.Default;
}
}