private static object callFunction(Enum connectionName, Enum schemaName, Enum dbFunctionName, OutputParameter[] outputParameters, InputParameter[] inputParameters, Type returnType) { DB.throwIfNullOrEmpty <CommandException>(connectionName, "Connection name"); DB.throwIfNullOrEmpty <CommandException>(dbFunctionName, "DB function name"); ConnectionMapping connectionMapping; if (!Map.connectionMappingDictionaryAtMapper.TryGetValue(connectionName.ToString(), out connectionMapping)) { throw new CommandException("Connection mapping cannot be null or empty."); } string schemaNameDotDBFunctionName = dbFunctionName.ToString(); if (schemaName != null) { schemaNameDotDBFunctionName = schemaName.ToString() + "." + dbFunctionName; } DbCommand dbCommand = connectionMapping.CreateOrGetDBFunctionCallDbCommand(schemaNameDotDBFunctionName); if (inputParameters != null) { foreach (InputParameter inputParameter in inputParameters) { object value = null; if (inputParameter.Value == null) { value = DBNull.Value; } else { value = inputParameter.Value; } DbParameter dbParameter = connectionMapping.CreateDbParameter(inputParameter.Name, value); dbCommand.Parameters.Add(dbParameter); } } if (outputParameters != null) { foreach (OutputParameter outputParameter in outputParameters) { DbParameter dbParameter = connectionMapping.CreateDbParameterForInputOutputNonTimestamp(outputParameter.Name, outputParameter.Value, outputParameter.Type); dbCommand.Parameters.Add(dbParameter); } } object returnValue = null; if (connectionMapping.DBVendor == DBVendor.Oracle) { DbParameter returnValueDbParameter = connectionMapping.CreateDbParameterForReturnValueNonTimestamp(returnType); dbCommand.Parameters.Add(returnValueDbParameter); using (dbCommand.Connection = connectionMapping.CreateDbConnection()) { try { dbCommand.Connection.Open(); dbCommand.ExecuteNonQuery(); } catch (Exception ex) { throw; } } foreach (DbParameter dbParameter in dbCommand.Parameters) { if (dbParameter.ParameterName == "return_value") { returnValue = dbParameter.Value; } } } else if (connectionMapping.DBVendor == DBVendor.Microsoft) { using (dbCommand.Connection = connectionMapping.CreateDbConnection()) { dbCommand.Connection.Open(); using (IDataReader dataReader = dbCommand.ExecuteReader()) { dataReader.Read(); returnValue = dataReader.GetValue(0); } } } if (outputParameters != null) { foreach (DbParameter dbParameter in dbCommand.Parameters) { OutputParameter outputParameter = outputParameters.ToList().Find(x => x.Name == dbParameter.ParameterName); if (outputParameter != null) { outputParameter.Value = dbParameter.Value; } } } return(returnValue); }
private static void callProcedure(Enum connectionName, Enum schemaName, Enum storedProcedureName, OutputParameter[] outputParameters, InputParameter[] inputParameters) { DB.throwIfNullOrEmpty <CommandException>(connectionName, "Connection name"); DB.throwIfNullOrEmpty <CommandException>(storedProcedureName, "Stored procedure name"); ConnectionMapping connectionMapping; if (!Map.connectionMappingDictionaryAtMapper.TryGetValue(connectionName.ToString(), out connectionMapping)) { throw new CommandException("Connection mapping cannot be null or empty."); } string schemaNameDotStoredProcedureName = storedProcedureName.ToString(); if (schemaName != null) { schemaNameDotStoredProcedureName = schemaName.ToString() + "." + storedProcedureName; } DbCommand dbCommand = connectionMapping.CreateOrGetStoredProcedureCallDbCommand(schemaNameDotStoredProcedureName); if (inputParameters != null) { foreach (InputParameter inputParameter in inputParameters) { object value = null; if (inputParameter.Value == null) { value = DBNull.Value; } else { value = inputParameter.Value; } DbParameter dbParameter = connectionMapping.CreateDbParameter(inputParameter.Name, value); dbCommand.Parameters.Add(dbParameter); } } if (outputParameters != null) { foreach (OutputParameter outputParameter in outputParameters) { DbParameter dbParameter = connectionMapping.CreateDbParameterForInputOutputNonTimestamp(outputParameter.Name, outputParameter.Value, outputParameter.Type); dbCommand.Parameters.Add(dbParameter); } } using (dbCommand.Connection = connectionMapping.CreateDbConnection()) { try { dbCommand.Connection.Open(); dbCommand.ExecuteNonQuery(); } catch (Exception ex) { throw; } } if (outputParameters != null) { foreach (DbParameter dbParameter in dbCommand.Parameters) { OutputParameter outputParameter = outputParameters.ToList().Find(x => x.Name == dbParameter.ParameterName); if (outputParameter != null) { outputParameter.Value = dbParameter.Value; } } } }