Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
                    }
                }
            }
        }