Ejemplo n.º 1
0
        /// <summary>
        /// Static method to build setting arguments for a database setting helper
        /// </summary>
        /// <param name="commandText">The query or stored proc</param>
        /// <param name="commandType">If it's a query or stored proc</param>
        /// <param name="parameters">Parameters, if any</param>
        /// <param name="builder">The delegate method to build the object of type T</param>
        /// <returns>A predefined set of args</returns>
        public static IList <IIpArgument> GetDatabaseArg <T>(string commandText, CommandType commandType, IList <IDbDataParameter> parameters, BuildDataObject <T> builder)
        {
            var retVal   = new List <IIpArgument>();
            var queryArg = new IpArgument {
                ArgumentKey = "commandText", ArgumentValue = commandText
            };
            var paramArg = new IpArgument {
                ArgumentKey = "parameters", ArgumentValue = parameters
            };
            var builderArg = new IpArgument {
                ArgumentKey = "builder", ArgumentValue = builder
            };

            queryArg.KeyValidators = new List <IIpValidator>
            {
                new IpRequiredStringValidator(queryArg.ArgumentKey),
                new IpStringValueValidator(queryArg.ArgumentKey, "commandText")
            };

            queryArg.ValueValidators = new List <IIpValidator>
            {
                new IpTypeValidator <string>(queryArg.ArgumentValue),
                new IpRequiredStringValidator(queryArg.ArgumentValue)
            };

            var typeArg = new IpArgument {
                ArgumentKey = "commandType", ArgumentValue = commandType
            };

            typeArg.KeyValidators = new List <IIpValidator>
            {
                new IpRequiredStringValidator(typeArg.ArgumentKey),
                new IpStringValueValidator(typeArg.ArgumentKey, "commandType")
            };

            typeArg.ValueValidators = new List <IIpValidator>
            {
                new IpRequiredStringValidator(queryArg.ArgumentValue),
                new IpTypeValidator <CommandType>(queryArg.ArgumentValue)
            };

            paramArg.KeyValidators = new List <IIpValidator>
            {
                new IpRequiredStringValidator(typeArg.ArgumentKey),
                new IpStringValueValidator(typeArg.ArgumentKey, "parameters")
            };

            paramArg.ValueValidators = new List <IIpValidator>
            {
                new IpTypeValidator <IList <IDbDataParameter> >(paramArg.ArgumentValue)
            };

            builderArg.KeyValidators = new List <IIpValidator>
            {
                new IpRequiredStringValidator(builderArg.ArgumentKey),
                new IpStringValueValidator(builderArg.ArgumentKey, "builder")
            };

            builderArg.ValueValidators = new List <IIpValidator>
            {
                new IpTypeValidator <BuildDataObject <T> >(builderArg.ArgumentValue)
            };

            retVal.Add(queryArg);
            retVal.Add(typeArg);
            retVal.Add(paramArg);
            retVal.Add(builderArg);

            return(retVal);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets a single row from a query asynchronously
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="commandText">The query or stored procedure to run</param>
        /// <param name="commandType">The type of command, text, or stored proc to run</param>
        /// <param name="buildObject">The delegate method that runs to build an object of type T</param>
        /// <param name="parameters">Optional list of parameters to use in the query</param>
        /// <returns>The first row returned from the Query converted to an object of type T</returns>
        public virtual async Task <T> GetSingleRowAsync <T>(string commandText, CommandType commandType, BuildDataObject <T> buildObject, IList <IDbDataParameter> parameters = null)
        {
            parameters = parameters ?? new List <IDbDataParameter>();

            try
            {
                using (var connection = ProviderFactory.CreateConnection())
                {
                    if (connection == null)
                    {
                        throw new IpDataAccessException("Could not connect to the database");
                    }

                    connection.ConnectionString = ConnectionString;
                    connection.Open();

                    using (var command = connection.CreateCommand())
                    {
                        command.CommandTimeout = QueryTimeout == 0 ? 120 : QueryTimeout;
                        command.CommandType    = commandType;
                        command.CommandText    = commandText;
                        command.Parameters.AddRange(parameters.ToArray());

                        using (var reader = await command.ExecuteReaderAsync())
                        {
                            while (await reader.ReadAsync())
                            {
                                return(buildObject(reader));
                            }
                        }
                    }
                }

                return(default(T));
            }
            catch (Exception ex)
            {
                throw new IpDataAccessException(string.Format("SQL {0}: {1} failed to execute, see inner exception for more details.",
                                                              commandType == CommandType.StoredProcedure ? "Stored Proc" : "Text", commandText), ex);
            }
        }