Exemplo n.º 1
0
 /// <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);
 }
Exemplo n.º 2
0
 /// <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;
 }
Exemplo n.º 3
0
        /// <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;
            }
        }
Exemplo n.º 4
0
 /// <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));
 }
Exemplo n.º 5
0
 /// <summary>
 /// 执行查询,并且忽略返回值;如果期望用返回值当影响行数,建议最好用 ExecuteScalar 直接返回一个值更可靠一些。
 /// </summary>
 /// <param name="dbCommandCache">DbCommandCache对象。</param>
 /// <returns>返回查询结果。</returns>
 protected virtual int ExecuteNonQuery(AdoCommandCache dbCommandCache)
 {
     return(dbCommandCache?.DbCommand?.ExecuteNonQuery() ?? 0);
 }
Exemplo n.º 6
0
 /// <summary>
 /// 执行查询,并返回查询的第一条记录的第一个列。
 /// </summary>
 /// <param name="dbCommandCache">DbCommandCache对象。</param>
 /// <returns>返回查询结果。</returns>
 protected virtual object ExecuteScalar(AdoCommandCache dbCommandCache)
 {
     return(dbCommandCache?.DbCommand?.ExecuteScalar());
 }