/// <summary> /// 创建实例。 /// </summary> /// <param name="dataReader">ADO.NET DataReader对象。</param> /// <param name="commandCache">ADO.NET Command 缓存对象。</param> /// <param name="command">命令对象。</param> /// <param name="commandText">当前查询命令语句。</param> public AdoDataQueryReader(IDataReader dataReader, AdoCommandCache commandCache, ICommand command, string commandText) : base(commandCache?.Connection, command, commandText) { _dataReader = dataReader; _commandCache = commandCache; command?.DataContext?.DisposableObjects?.Add(dataReader); }
/// <summary> /// 销毁DbCommand /// </summary> /// <param name="cache">DbCommandCache对象。</param> public virtual void DestroyDbCommand(AdoCommandCache cache) { if (cache == null) { return; } DestroyDbCommand(cache.GetDbCommand(true)); DestroyConnection(cache.GetConnection(true)); cache.Connection = null; cache.DbCommand = null; }
/// <summary> /// 创建DbCommand对象。 /// </summary> /// <param name="commandText">命令文本</param> /// <returns>返回DbCommandCache对象。</returns> protected virtual AdoCommandCache CreateDbCommand(string commandText) { var connection = (IAdoConnection)DataContext?.Connections?.Take(); if (connection == null) { return(null); } IDbCommand dbCommand = null; try { connection.Open(); dbCommand = connection.DbConnection.CreateCommand(); //dbCommand.Connection = connection.DbConnection; if (connection.Transaction.Working) { dbCommand.Transaction = connection.DbTransaction; } if (Timeout > 0) { dbCommand.CommandTimeout = Timeout; } dbCommand.CommandText = commandText; FillDbCommandParameters(dbCommand); var cache = new AdoCommandCache() { DbCommand = dbCommand, Connection = connection }; var list = ThreadHelper.InterlockedGet(ref _list_commands); if (list == null) { DestroyDbCommand(cache); return(null); } list.Enqueue(cache); return(cache); } catch { DestroyConnection(connection); DestroyDbCommand(dbCommand); throw; } }
/// <summary> /// 创建ADO.NET 查询读取器实例。 /// </summary> /// <param name="dataReader">ADO.NET DataReader对象。</param> /// <param name="commandCache">ADO.NET Command 缓存对象。</param> protected virtual AdoDataQueryReader CreateDataQueryReader(IDataReader dataReader, AdoCommandCache commandCache) { return(new AdoDataQueryReader(dataReader, commandCache, this, commandCache.DbCommand.CommandText)); }
/// <summary> /// 执行查询,并且忽略返回值;如果期望用返回值当影响行数,建议最好用 ExecuteScalar 直接返回一个值更可靠一些。 /// </summary> /// <param name="dbCommandCache">DbCommandCache对象。</param> /// <returns>返回查询结果。</returns> protected virtual int ExecuteNonQuery(AdoCommandCache dbCommandCache) { return(dbCommandCache?.DbCommand?.ExecuteNonQuery() ?? 0); }
/// <summary> /// 执行查询,并返回查询的第一条记录的第一个列。 /// </summary> /// <param name="dbCommandCache">DbCommandCache对象。</param> /// <returns>返回查询结果。</returns> protected virtual object ExecuteScalar(AdoCommandCache dbCommandCache) { return(dbCommandCache?.DbCommand?.ExecuteScalar()); }