Пример #1
0
        /// <summary>
        /// Populates the command parameters.
        /// </summary>
        /// <typeparam name="TParameters">The type of the parameters.</typeparam>
        /// <param name="connector">Reference to a database connector.</param>
        /// <param name="command">The command.</param>
        /// <param name="descriptor">The routine type descriptor.</param>
        /// <param name="parameters">The parameters.</param>
        /// <param name="ignoreProperties">The ignore properties.</param>
        /// <exception cref="System.ArgumentNullException">descriptor - descriptor</exception>
        private static void PopulateCommandParameters <TParameters>(IDatabaseConnector connector, IDatabaseCommand command, IRoutineTypeDescriptor descriptor, TParameters parameters, string[] ignoreProperties)
        {
            if (descriptor == null)
            {
                throw new ArgumentNullException(nameof(descriptor), $"{nameof(descriptor)} can not be null.");
            }

            var formatProvider = connector.GetCommandFormatProvider();

            foreach (var parameter in descriptor.Parameters)
            {
                if (ignoreProperties != null && ignoreProperties.Contains(parameter.ParameterName))
                {
                    continue;
                }

                var commandParameter = command.AddParameter(formatProvider.GetParameterName(parameter.ParameterName), DbTypeConverter.FromType(parameter.Type));
                commandParameter.Direction = parameter.IsInput ? ParameterDirection.Input : ParameterDirection.Output;

                if (parameters == null || parameters.Equals(default(TParameters)))
                {
                    continue;
                }

                var value = parameter.PropertyInfo.GetValue(parameters);
                commandParameter.Value = value ?? DBNull.Value;
            }
        }
Пример #2
0
        /// <summary>
        /// Populates the command parameters using the collection of columns.
        /// </summary>
        /// <param name="command">A refecence to a database command.</param>
        /// <param name="columns">Array of column property descriptors</param>
        protected virtual void PopulateParameters(IDatabaseCommand command, IEnumerable <IColumnDescriptor> columns)
        {
            var typeConverter = this.Connector.GetDbStringTypeConverter();

            foreach (var column in columns)
            {
                command.AddParameter($"{this.FormatProvider.GetParameterName(column.ColumnName)}", typeConverter.GetType(column.DataType), column.MaxSize, column.Precision, column.Scale);
            }
        }
Пример #3
0
        /// <summary>
        /// Populates the stored procedure command parameters.
        /// </summary>
        /// <param name="command">A database command.</param>
        /// <param name="parameters">The parameters.</param>
        protected void PopulateParameters(IDatabaseCommand command, TParameters parameters)
        {
            var typeConverter  = this.Connector.GetDbStringTypeConverter();
            var valueConverter = this.Connector.GetValueConverter();

            foreach (var parameter in this.Descriptor.Parameters)
            {
                command.AddParameter(
                    this.FormatProvider.GetParameterName(parameter.ParameterName),
                    typeConverter.GetType(parameter.DataType),
                    parameter.MaxSize,
                    parameter.Precision,
                    parameter.Scale,
                    valueConverter.ConvertFrom(parameter.PropertyInfo.GetValue(parameters), parameter.DataType));
            }
        }
Пример #4
0
        public async Task <T> ExecuteSelectByIdAsync <T>(
            string sql,
            Func <IDatabaseResultReader, T> mappingFunc,
            Func <object, IDatabaseCommandParameter> paramProvider,
            object primaryKey)
            where T : class, IRestResource
        {
            try
            {
                using (IDatabaseConnection connection = _sqlClassProvider.CreateSqlConnection(_connectionString))
                    using (IDatabaseCommand command = _sqlClassProvider.CreateSqlCommand(sql, connection))
                    {
                        command.AddParameter(paramProvider(primaryKey));

                        await connection.OpenAsync().ConfigureAwait(false);

                        using (IDatabaseResultReader reader = await command.ExecuteReaderAsync().ConfigureAwait(false))
                        {
                            return(await reader.ReadAsync().ConfigureAwait(false) ? mappingFunc(reader) : default);