/// <summary> /// 执行指定数据库连接对象的数据阅读器. /// </summary> /// <remarks> /// 如果是BaseDbHelper打开连接,当连接关闭DataReader也将关闭. /// 如果是调用都打开连接,DataReader由调用都管理. /// </remarks> /// <param name="connection">一个有效的数据库连接对象</param> /// <param name="transaction">一个有效的事务,或者为 'null'</param> /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param> /// <param name="commandText">存储过程名或SQL语句</param> /// <param name="commandParameters">DbParameters参数数组,如果没有参数则为'null'</param> /// <param name="connectionOwnership">标识数据库连接对象是由调用者提供还是由BaseDbHelper提供</param> /// <returns>返回包含结果集的DbDataReader</returns> private static DbDataReader ExecuteReader(DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters, DbConnectionOwnership connectionOwnership) { if (connection == null) throw new ArgumentNullException("connection"); //connection.Close(); connection.ConnectionString = GetRealConnectionString(commandText); connection.Open(); bool mustCloseConnection = false; // 创建命令 DbCommand cmd = Factory.CreateCommand(); try { PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection); // 创建数据阅读器 DbDataReader dataReader; #if DEBUG DateTime dt1 = DateTime.Now; #endif if (connectionOwnership == DbConnectionOwnership.External) { dataReader = cmd.ExecuteReader(); } else { dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); } #if DEBUG DateTime dt2 = DateTime.Now; m_querydetail += GetQueryDetail(cmd.CommandText, dt1, dt2, commandParameters); #endif m_querycount++; // 清除参数,以便再次使用.. bool canClear = true; foreach (DbParameter commandParameter in cmd.Parameters) { if (commandParameter.Direction != ParameterDirection.Input) canClear = false; } if (canClear) { //cmd.Dispose(); cmd.Parameters.Clear(); } return dataReader; } catch { if (mustCloseConnection) connection.Close(); throw; } }
/// <summary> /// 执行指定数据库连接对象的数据阅读器. /// </summary> /// <remarks> /// 如果是BaseDbHelper打开连接,当连接关闭DataReader也将关闭. /// 如果是调用都打开连接,DataReader由调用都管理. /// </remarks> /// <param name="connection">一个有效的数据库连接对象</param> /// <param name="transaction">一个有效的事务,或者为 'null'</param> /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param> /// <param name="commandText">存储过程名或SQL语句</param> /// <param name="commandParameters">DbParameters参数数组,如果没有参数则为'null'</param> /// <param name="connectionOwnership">标识数据库连接对象是由调用者提供还是由BaseDbHelper提供</param> /// <returns>返回包含结果集的DbDataReader</returns> private static DbDataReader ExecuteReader(DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters, DbConnectionOwnership connectionOwnership) { if (connection == null) throw new ArgumentNullException("connection"); bool mustCloseConnection = false; // 创建命令 DbCommand cmd = Factory.CreateCommand(); try { PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection); // 创建数据阅读器 DbDataReader dataReader; #if DEBUG DateTime dt1 = DateTime.Now; #endif if (connectionOwnership == DbConnectionOwnership.External) { dataReader = cmd.ExecuteReader(); } else { dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); } #if DEBUG DateTime dt2 = DateTime.Now; m_querydetail += GetQueryDetail(cmd.CommandText, dt1, dt2, commandParameters); #endif m_querycount++; // 清除参数,以便再次使用.. // HACK: There is a problem here, the output parameter values are fletched // when the reader is closed, so if the parameters are detached from the command // then the SqlReader can磘 set its values. // When this happen, the parameters can磘 be used again in other command. bool canClear = true; foreach (DbParameter commandParameter in cmd.Parameters) { if (commandParameter.Direction != ParameterDirection.Input) canClear = false; } if (canClear) { //cmd.Dispose(); cmd.Parameters.Clear(); } return dataReader; } catch { if (mustCloseConnection) connection.Close(); throw; } }
public static SQLiteDataReader ExecuteReader(SQLiteConnection connection, SQLiteTransaction transaction, CommandType commandType, string commandText, SQLiteParameter[] commandParameters, DbConnectionOwnership connectionOwnership) { SQLiteCommand cmd = new SQLiteCommand(); PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters); SQLiteDataReader dr; if (connectionOwnership == DbConnectionOwnership.External) { dr = cmd.ExecuteReader(); } else { dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); } cmd.Parameters.Clear(); return(dr); }
private static DbDataReader ExecuteReader(DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters, DbConnectionOwnership connectionOwnership) { if (connection == null) { throw new ArgumentNullException("connection"); } bool mustCloseConnection = false; // 创建命令 DbCommand cmd = SqlClientFactory.Instance.CreateCommand(); try { PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection); // 创建数据阅读器 DbDataReader dataReader; if (connectionOwnership == DbConnectionOwnership.External) { dataReader = cmd.ExecuteReader(); } else { dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); } // 清除参数,以便再次使用.. // HACK: There is a problem here, the output parameter values are fletched // when the reader is closed, so if the parameters are detached from the command // then the SqlReader can磘 set its values. // When this happen, the parameters can磘 be used again in other command. bool canClear = true; foreach (DbParameter commandParameter in cmd.Parameters) { if (commandParameter.Direction != ParameterDirection.Input) { canClear = false; } } if (canClear) { //cmd.Dispose(); cmd.Parameters.Clear(); } return(dataReader); } catch { if (mustCloseConnection) { connection.Close(); } throw; } }
private static SQLiteDataReader ExecuteReader(SQLiteConnection connection, SQLiteTransaction transaction, CommandType commandType, string commandText, SQLiteParameter[] commandParameters, DbConnectionOwnership connectionOwnership) { SQLiteCommand cmd = new SQLiteCommand(); PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters); SQLiteDataReader dr; if (connectionOwnership == DbConnectionOwnership.External) dr = cmd.ExecuteReader(); else dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return dr; }