Exemplo n.º 1
0
        /// <summary>
        /// 执行修改数据库操作,修改、删除等无返回值的操作
        /// </summary>
        /// <param name="sql">执行的SQL语句</param>
        /// <param name="paramList">SqlParameter的列表</param>
        /// <param name="queryCommandType">SQL语句类型</param>
        /// <returns>成功执行返回True</returns>
        public int Execute(
            string sql,
            ParamList paramList,
            CommandType exeCommandType,
            Dictionary <string, bool> cacheTables)
        {
            if (!ConnectDataBase())
            {
                throw(new ApplicationException("没有建立数据库连接"));
            }
            paramList         = _db.CurrentDbAdapter.RebuildParamList(ref sql, paramList);
            _comm.CommandType = exeCommandType;
            _comm.CommandText = sql;
            int ret = -1;

            _comm.Parameters.Clear();

            string paramInfo = null;

            if (paramList != null)
            {
                paramList.Fill(_comm, _db);
                if (_db.SqlOutputer.HasOutput)
                {
                    paramInfo = paramList.GetParamString(_db, this);
                }
            }

            try
            {
                if (_db.SqlOutputer.HasOutput)
                {
                    OutMessage(MessageType.Execute, "NonQuery", null, sql + ";" + paramInfo);
                }

                ret = _comm.ExecuteNonQuery();
                _lastAffectedRows = ret;
                if (paramList != null && _comm.CommandType == CommandType.StoredProcedure)
                {
                    paramList.ReturnParameterValue(_comm, _db);
                }

                if (cacheTables != null && cacheTables.Count > 0)
                {
                    _db.QueryCache.ClearTableCache(cacheTables, this);
                }
            }
            catch (Exception e)
            {
                //如果正在执行事务,回滚
                //RoolBack();
                throw new SQLRunningException(sql, paramList, _db, e);
            }
            finally
            {
                AutoClose();
            }

            return(ret);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 运行查询的方法,返回一个DataReader,适合小数据的读取
        /// </summary>
        /// <param name="sql">要查询的SQL语句</param>
        /// <param name="paramList">SqlParameter的列表</param>
        /// <param name="queryCommandType">SQL语句类型</param>
        /// <returns>返回DataReader</returns>
        public IDataReader Query(
            string sql,
            ParamList paramList,
            CommandType exeCommandType,
            Dictionary <string, bool> cacheTables
            )
        {
            IDataReader reader = null;

            paramList = _db.CurrentDbAdapter.RebuildParamList(ref sql, paramList);
            if (cacheTables != null && cacheTables.Count > 0)
            {
                reader = _db.QueryCache.GetReader(cacheTables, sql, paramList, this);
                if (reader != null)
                {
                    return(reader);
                }
            }

            //若连接数据库失败抛出错误
            if (!ConnectDataBase())
            {
                throw(new ApplicationException("没有建立数据库连接。"));
            }


            _comm.CommandType = exeCommandType;
            _comm.CommandText = sql;
            _comm.Parameters.Clear();
            string paramInfo = null;

            if (paramList != null)
            {
                paramList.Fill(_comm, _db);
                if (_db.SqlOutputer.HasOutput)
                {
                    paramInfo = paramList.GetParamString(_db, this);
                }
            }
            try
            {
                if ((_commitState == CommitState.AutoCommit) && !IsTran)
                {
                    if (_db.SqlOutputer.HasOutput)
                    {
                        OutMessage(MessageType.Query, "AutoCloseReader", null, sql + ";" + paramInfo);
                    }

                    reader = _comm.ExecuteReader(CommandBehavior.CloseConnection);
                }
                else
                {
                    if (_db.SqlOutputer.HasOutput)
                    {
                        OutMessage(MessageType.Query, "Reader", null, sql + ";" + paramInfo);
                    }

                    reader = _comm.ExecuteReader();
                }
                if (paramList != null)
                {
                    paramList.ReturnParameterValue(_comm, _db);
                }

                //读入缓存
                if (cacheTables != null && cacheTables.Count > 0)
                {
                    IDataReader nreader = _db.QueryCache.SetReader(reader, cacheTables, sql, paramList, this);
                    if (nreader != null)
                    {
                        reader.Close();
                        reader = nreader;
                    }
                }
            }
            catch (Exception e)
            {
                AutoClose();
                //如果正在执行事务,回滚
                //RoolBack();
                throw new SQLRunningException(sql, paramList, _db, e);
            }


            return(reader);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 运行查询的方法,返回一个DataSet
        /// </summary>
        /// <param name="sql">要查询的SQL语句</param>
        /// <param name="paramList">SqlParameter的列表</param>
        /// <param name="queryCommandType">SQL语句类型</param>
        /// <returns>返回结果集</returns>
        public DataSet QueryDataSet(
            string sql,
            ParamList paramList,
            CommandType queryCommandType,
            Dictionary <string, bool> cacheTables
            )
        {
            DataSet dataSet = null;

            paramList = _db.CurrentDbAdapter.RebuildParamList(ref sql, paramList);
            if (cacheTables != null && cacheTables.Count > 0)
            {
                dataSet = _db.QueryCache.GetDataSet(cacheTables, sql, paramList, this);
                if (dataSet != null)
                {
                    return(dataSet);
                }
            }
            //若连接数据库失败抛出错误
            if (!ConnectDataBase())
            {
                throw(new ApplicationException("没有建立数据库连接。"));
            }

            dataSet           = new DataSet();
            _comm.CommandType = queryCommandType;
            _comm.CommandText = sql;
            _sda = _dbAdapter.GetAdapter();
            _sda.SelectCommand = _comm;
            string paramInfo = null;

            if (paramList != null)
            {
                paramList.Fill(_comm, _db);
                if (_db.SqlOutputer.HasOutput)
                {
                    paramInfo = paramList.GetParamString(_db, this);
                }
            }

            try
            {
                if (_db.SqlOutputer.HasOutput)
                {
                    OutMessage(MessageType.Query, "DataSet", null, sql + ";" + paramInfo);
                }

                _sda.Fill(dataSet);
                if (paramList != null)
                {
                    paramList.ReturnParameterValue(_comm, _db);
                }

                if (cacheTables != null && cacheTables.Count > 0)
                {
                    _db.QueryCache.SetDataSet(dataSet, cacheTables, sql, paramList, this);
                }
            }
            catch (Exception e)
            {
                //如果正在执行事务,回滚
                //RoolBack();
                throw new SQLRunningException(sql, paramList, _db, e);
            }
            finally
            {
                AutoClose();
            }

            return(dataSet);
        }