Beispiel #1
0
        public virtual DbCommand CreateCommand(Expressions.IStatementBase statement)
        {
            if (statement == null)
            {
                throw new ArgumentNullException(nameof(statement));
            }

            //创建指定语句的数据命令
            var command = this.CreateCommand(this.Script(statement), CommandType.Text);

            //设置数据命令的参数集
            if (statement.HasParameters)
            {
                foreach (var parameter in statement.Parameters)
                {
                    //通过命令创建一个新的空参数
                    var dbParameter = command.CreateParameter();

                    //设置参数对象的各属性的初始值
                    //注意:不能设置参数的DbType属性,因为不同数据提供程序可能因为不支持特定类型而导致异常
                    dbParameter.ParameterName = parameter.Name;
                    dbParameter.Direction     = parameter.Direction;
                    dbParameter.Value         = parameter.Value ?? DBNull.Value;

                    //设置命令参数各属性
                    this.SetParameter(dbParameter, parameter);

                    //将参数加入到命令的参数集中
                    command.Parameters.Add(dbParameter);
                }
            }

            return(command);
        }
Beispiel #2
0
        private string Script(Expressions.IStatementBase statement)
        {
            //从对象池中获取一个访问器
            var visitor = _visitors.GetObject();

            try
            {
                //访问指定的语句
                visitor.Visit(statement);

                //输出访问器的脚本内容
                return(visitor.Output.ToString());
            }
            finally
            {
                //将使用完成的访问器释放回对象池
                _visitors.Release(visitor);
            }
        }
        public virtual DbCommand CreateCommand(Expressions.IStatementBase statement)
        {
            if (statement == null)
            {
                throw new ArgumentNullException(nameof(statement));
            }

            //创建指定语句的数据命令
            var command = this.CreateCommand(this.Script(statement), CommandType.Text);

            //设置数据命令的参数集
            if (statement.HasParameters)
            {
                foreach (var parameter in statement.Parameters)
                {
                    parameter.Attach(command);
                }
            }

            return(command);
        }