/// <summary> /// 执行查询 /// </summary> /// <param name="sqls"></param> /// <returns></returns> public int ExecuteNonQuery(params SqlQuery[] sqls) { if (sqls.Length == 0) { throw new ArgumentOutOfRangeException("sqls", "SQLEntity至少应指定一个!"); } DbTransaction trans = null; DbCommand cmd; int result = 0; DbConnection conn = this.createNewConnection(); //打开连接并设置事务 trans = conn.BeginTransaction(); SqlEntityHandler sh = s => { //创建Command,并设置连接 cmd = this.CreateCommand(s.Sql); cmd.Connection = conn; //自动判断是T-SQL还是存储过程 cmd.CommandType = procedureRegex.IsMatch(s.Sql) ? CommandType.Text : CommandType.StoredProcedure; //添加参数 if (s.Parameters != null) { cmd.Parameters.AddRange(s.Parameters); } //使用事务 cmd.Transaction = trans; try { //SQLite不支持并发写入 if (this.DbType == DataBaseType.SQLite) { Monitor.Enter(locker); result += cmd.ExecuteNonQuery(); Monitor.Exit(locker); } else { result += cmd.ExecuteNonQuery(); } cmd.Dispose(); this.callMiddleware("ExecuteNonQuery", s.Sql, s.Parameters, null); } catch (Exception ex) { this.callMiddleware("ExecuteNonQuery", s.Sql, s.Parameters, ex); cmd.Dispose(); throw ex; } }; try { foreach (SqlQuery sql in sqls) { sql.Parse(this.GetAdapter()); sh(sql); } //提交事务 trans.Commit(); } catch (DbException ex) { //如果用事务执行,则回滚 trans.Rollback(); //重新抛出异常 throw ex; } finally { //关闭连接 conn.Close(); } return(result); }
/// <summary> /// 执行查询 /// </summary> /// <param name="sqls"></param> /// <returns></returns> public int ExecuteNonQuery(params SqlQuery[] sqls) { if (this._totalOpen) { foreach (SqlQuery sql in sqls) { this.AddTotalSql(sql.Sql); } } if (sqls.Length == 0) { throw new ArgumentOutOfRangeException("sqls", "SQLEntity至少应指定一个!"); } DbTransaction trans = null; DbCommand cmd; int result = 0; DbConnection conn = this.CreateOpenedConnection(); //打开连接并设置事务 trans = conn.BeginTransaction(); SqlEntityHandler sh = s => { //创建Command,并设置连接 cmd = this.CreateCommand(s.Sql); cmd.Connection = conn; //自动判断是T-SQL还是存储过程 cmd.CommandType = procedureRegex.IsMatch(s.Sql) ? CommandType.Text : CommandType.StoredProcedure; //添加参数 if (s.Parameters != null) { cmd.Parameters.AddRange(s.ToParams(dbFactory)); } //使用事务 cmd.Transaction = trans; result += cmd.ExecuteNonQuery(); }; try { foreach (SqlQuery sql in sqls) { sh(sql); } //提交事务 trans.Commit(); } catch (DbException ex) { //如果用事务执行,则回滚 trans.Rollback(); //重新抛出异常 throw ex; } finally { //关闭连接 conn.Close(); } return(result); }