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); }
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); }