/// <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); }
/// <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); }
/// <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); }