| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554 |
- using System;
- using System.Collections;
- using System.Data;
- using System.Data.SqlClient;
- using System.Data.OleDb;
- using System.Data.OracleClient;
- using System.Xml;
- using System.IO;
- using System.Text;
- using System.Threading;
- using System.Runtime.Remoting.Lifetime;
- using System.Data.Common;
- namespace STMes
- {
- /// <summary>
- /// DBProxy 的摘要说明。
- /// </summary>
- public class DBProxy : MarshalByRefObject, IDisposable
- {
- private static Hashtable _dataProviderNameList = Hashtable.Synchronized(new Hashtable(5));
- private static Hashtable _dataProviderTypeList = Hashtable.Synchronized(new Hashtable(5));
- private CoreWriteLogFile cwl = new CoreWriteLogFile();
- public DBProxy()
- {
- AddDataProvider(new DataProvider.SqlDataProvider());
- AddDataProvider(new DataProvider.OleDbDataProvider());
- AddDataProvider(new DataProvider.OdbcDataProvider());
- AddDataProvider(new DataProvider.OracleDataProvider());
- AddDataProvider(new DataProvider.ODPDataProvider());
- Console.WriteLine("创建数据库代理DBProxy...\n");
- //从数据库配置文件中读取数据库连接信息
- ReadDbConnectionInfo(@"MesDB.cfg");
- //预先创建所有连接...
- CreateAllConnections();
- _connLifeTimeA = int.Parse(System.Configuration.ConfigurationManager.AppSettings["connLifeTimeA"]);
- _connLifeTimeB = int.Parse(System.Configuration.ConfigurationManager.AppSettings["connLifeTimeB"]);
- _connLifeTimeC = int.Parse(System.Configuration.ConfigurationManager.AppSettings["connLifeTimeC"]);
- //创建一个线程,用来定时清除已经断开连接的DBManager
- #region 原来代码 maliang 2011-10-19
- /*
- _checkConnThread = new Thread(new ThreadStart(CheckConnActive));
- _checkConnThread.Start();
- _fixConnThread = new Thread(new ThreadStart(FixConnections));
- _fixConnThread.Start();
- */
- #endregion
- #region 变更代码 maliang 2011-10-19
- _ConnectionsListenerThread = new Thread(new ThreadStart(ConnectionsListener));
- _ConnectionsListenerThread.Start();
- #endregion
- _init = true;
- _reference++;
- }
- //没有显示调用Dispose()时调用
- ~DBProxy()
- {
- Dispose(false);
- }
- #region IDisposable 成员
- public void Dispose()
- {
- Dispose(true);
- GC.Collect();
- }
- protected virtual void Dispose(bool disposing)
- {
- _reference--;
- if (disposing == true)
- {
- //释放受控资源
- }
- //释放未受控资源
- //回滚所有DBManager事务
- foreach (DictionaryEntry it in _transList)
- {
- TransInfo info = (TransInfo)it.Value;
- IDbConnection conn = info.dbConnection;
- try
- {
- info.dbTransaction.Rollback();
- }
- catch (Exception)
- {
- }
- if (_reference == 0)
- {
- //关闭数据库连接
- foreach (DictionaryEntry it1 in _connList)
- {
- Hashtable ht1 = (Hashtable)it1.Value;
- foreach (DictionaryEntry it2 in ht1)
- {
- Hashtable ht2 = (Hashtable)it2.Value;
- foreach (DictionaryEntry it3 in ht2)
- {
- ArrayList arr = it3.Value as ArrayList;
- foreach (object obj in arr)
- {
- IDbConnection db = (IDbConnection)obj;
- db.Close();
- }
- }
- }
- }
- }
- }
- // 关闭线程
- try
- {
- if (_checkConnThread != null)
- _checkConnThread.Abort();
- }
- catch (Exception) { }
- try
- {
- if (_fixConnThread != null)
- _fixConnThread.Abort();
- }
- catch (Exception) { }
- }
- #endregion
- //返回由DBProxy为每个DBManager对象分配的ID
- public long GetDBManagerID()
- {
- lock (_dbManagerID)
- {
- ++_dbManagerID[0];
- if (_dbManagerID[0] > 3000000)
- _dbManagerID[0] = 1;
- return _dbManagerID[0];
- }
- }
- //设置DBManager对应的数据库信息
- public void SetDbInfo(long dbManagerID, string dbName, string priority)
- {
- if (_dbList.Contains(dbManagerID))
- {
- _dbList.Remove(dbManagerID);
- }
- ArrayList arr = new ArrayList();
- arr.Add(dbName);
- arr.Add(priority);
- _dbList.Add(dbManagerID, arr);
- }
- //获取数据库类型,用字符串"SQLServer","Oracle", "OleDb"分别表示不同类型的数据库
- public string GetDbType(string name, out string err)
- {
- err = "";
- //未找到该数据库对应的配置信息
- if (_dbConfigInfo.Contains(name) == false)
- {
- err = "未找到指定的数据库";
- return "";
- }
- //获取该数据库对应优先级的配置信息
- DBConnectionInfo dbInfo = (DBConnectionInfo)_dbConfigInfo[name];
- return dbInfo.dbType;
- }
- #region"数据操作"
- //执行带参数的SQL语句,返回DataSet
- //事务处理
- public DataSet ExecuteQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
- {
- return ExecuteQueryBase(dbName, priority, guid, Sql, cmdType, Params, Values, out err);
- }
- private DataSet ExecuteQueryBase(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
- {
- err = "";
- DataSet ds = new DataSet();
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- if (guid != null)
- {
- //如果是事务
- if (_transList.Contains(guid))
- {
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- return ds;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- cwl.WriteLog("未找到请求的事务", LogInfoLevel.Error, "ExecuteQuery", "ExecuteQueryBase");
- return ds;
- }
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- cwl.WriteLog("获取数据库连接失败", LogInfoLevel.Error, "ExecuteQuery", "ExecuteQueryBase");
- return ds;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- ((IDbDataAdapter)adapter).SelectCommand = command;
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //设置事务
- if (trans != null)
- {
- command.Transaction = trans;
- }
- //给所有的参数赋值
- if (Params != null && Values != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
- }
- }
- adapter.Fill(ds);
- }
- catch (Exception ex)
- {
- err = ex.Message;
- cwl.WriteLog(err, LogInfoLevel.Error, "ExecuteQuery", "ExecuteQueryBase");
- }
- return ds;
- }
- public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
- {
- return this.ExecuteQuery(dbName, priority, Sql, cmdType, Params, Values, out err, false);
- }
- //非事务处理
- public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err, bool ifDBLink)
- {
- if (ifDBLink)
- {
- return ExecuteQueryDBLink(dbName, priority, Sql, cmdType, Params, Values, out err);
- }
- else
- {
- err = "";
- DataSet ds = new DataSet();
- //获取数据库连接...
- IDbConnection conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return ds;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- ((IDbDataAdapter)adapter).SelectCommand = command;
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //给所有的参数赋值
- if (Params != null && Values != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
- }
- }
- adapter.Fill(ds);
- }
- catch (Exception ex)
- {
- err = ex.Message;
- }
- finally
- {
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return ds;
- }
- }
- //非事务处理
- private DataSet ExecuteQueryDBLink(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
- {
- err = "";
- DataSet ds = new DataSet();
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return ds;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- ((IDbDataAdapter)adapter).SelectCommand = command;
- trans = conn.BeginTransaction();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- command.Transaction = trans;
- //给所有的参数赋值
- if (Params != null && Values != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
- }
- }
- adapter.Fill(ds);
- command.Transaction.Commit();
- command.CommandText = "begin dbms_session.close_database_link('XGCX');end;";
- command.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- if (trans != null)
- {
- trans.Rollback();
- }
- }
- finally
- {
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return ds;
- }
- //执行带参数的SQL语句,返回DataSet
- //事务处理
- public DataSet ExecuteQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
- {
- err = "";
- DataSet ds = null;
- ds = new DataSet();
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- return ds;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- return ds;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return ds;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- ((IDbDataAdapter)adapter).SelectCommand = command;
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //设置事务
- if (trans != null)
- {
- command.Transaction = trans;
- }
- //给所有的参数赋值
- if (ParameterNames != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- if (parameter.Direction != System.Data.ParameterDirection.Input)
- parameter.Size = 200;
- parameter.Value = Values[i];
- parameter.Direction = Directions[i];
- // parameter.IsNullable = IsNullables[i];
- // parameter.SourceColumn = SourceColumns[i];
- // parameter.SourceVersion = SourceVersions[i];
- command.Parameters.Add(parameter);
- }
- }
- adapter.Fill(ds);
- //返回输出参数值
- if (OutputValues != null)
- {
- for (int k = 0; k < command.Parameters.Count; k++)
- {
- if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
- {
- OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
- }
- }
- }
- }
- catch (Exception ex)
- {
- err = ex.Message;
- trans.Rollback();
- }
- return ds;
- }
- public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
- {
- return ExecuteQuery(dbName, priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err, false);
- }
- //非事务处理
- public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err, bool ifDBLink)
- {
- err = "";
- DataSet ds = null;
- ds = new DataSet();
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return ds;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- ((IDbDataAdapter)adapter).SelectCommand = command;
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //给所有的参数赋值
- if (ParameterNames != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- if (parameter.Direction != System.Data.ParameterDirection.Input)
- parameter.Size = 200; parameter.Value = Values[i];
- parameter.Direction = Directions[i];
- // parameter.IsNullable = IsNullables[i];
- // parameter.SourceColumn = SourceColumns[i];
- // parameter.SourceVersion = SourceVersions[i];
- command.Parameters.Add(parameter);
- }
- }
- adapter.Fill(ds);
- //返回输出参数值
- if (OutputValues != null)
- {
- for (int k = 0; k < command.Parameters.Count; k++)
- {
- if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
- {
- OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
- }
- }
- }
- }
- catch (Exception ex)
- {
- err = ex.Message;
- }
- finally
- {
- //释放连接
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return ds;
- }
- //不通过DBServer时使用
- //事务处理
- public int ExecuteNonQuery_NoDBSever(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- return lines;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- return lines;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- command.Transaction = trans;
- //给所有的参数赋值
- if (Params != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- }
- }
- lines = command.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- trans.Rollback();
- err = ex.Message;
- }
- return lines;
- }
- //非事务处理
- public int ExecuteNonQuery_NoDBSever(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //给所有的参数赋值
- if (Params != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- }
- }
- lines = command.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- }
- finally
- {
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return lines;
- }
- //执行带参数的SQL语句,返回受影响的行数
- //事务处理
- public int ExecuteNonQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- return lines;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- return lines;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- command.Transaction = trans;
- //给所有的参数赋值
- if (Params != null && Values != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
- }
- }
- lines = command.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- trans.Rollback();
- }
- return lines;
- }
- //非事务处理
- public int ExecuteNonQuery(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //给所有的参数赋值
- if (Params != null && Values != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
- }
- }
- lines = command.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- }
- finally
- {
- //释放连接
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return lines;
- }
- //执行带参数的SQL语句,返回受影响的行数
- // 事务操作
- public int ExecuteNonQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- return lines;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- return lines;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- showsql(Sql);
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //设置事务
- command.Transaction = trans;
- if (ParameterNames != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- parameter.Value = Values[i];
- parameter.Direction = Directions[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- if (parameter.Direction != System.Data.ParameterDirection.Input)
- parameter.Size = 200;
- parameter.Direction = Directions[i];
- command.Parameters.Add(parameter);
- }
- }
- lines = command.ExecuteNonQuery();
- //返回输出参数值
- if (OutputValues != null)
- {
- for (int k = 0; k < command.Parameters.Count; k++)
- {
- if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
- {
- OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
- }
- }
- }
- }
- catch (System.Exception ex)
- {
- err = ex.Message;
- trans.Rollback();
- }
- return lines;
- }
- //非事务处理
- public int ExecuteNonQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //给所有的参数赋值
- if (ParameterNames != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- parameter.Value = Values[i];
- parameter.Direction = Directions[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- if (parameter.Direction != System.Data.ParameterDirection.Input)
- parameter.Size = 200;
- parameter.Direction = Directions[i];
- command.Parameters.Add(parameter);
- }
- }
- lines = command.ExecuteNonQuery();
- //返回输出参数值
- if (OutputValues != null)
- {
- for (int k = 0; k < command.Parameters.Count; k++)
- {
- if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
- {
- OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
- }
- }
- }
- }
- catch (Exception ex)
- {
- err = ex.Message;
- }
- finally
- {
- //释放连接
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return lines;
- }
- //事务处理
- public int ExecuteNonQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, int[] Sizes, object[] Values, ref ArrayList OutputValues, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- return lines;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- return lines;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- command.Transaction = trans;
- //给所有的参数赋值
- if (ParameterNames != null && DbTypes != null && Values != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- parameter.Direction = Directions[i];
- if (parameter.Direction != System.Data.ParameterDirection.Input)
- parameter.Size = 200;
- parameter.Direction = Directions[i];
- parameter.Value = Values[i];
- command.Parameters.Add(parameter);
- }
- }
- lines = command.ExecuteNonQuery();
- //返回输出参数值
- if (OutputValues != null)
- {
- for (int k = 0; k < command.Parameters.Count; k++)
- {
- if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
- {
- OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
- }
- }
- }
- }
- catch (Exception ex)
- {
- err = ex.Message;
- trans.Rollback();
- }
- return lines;
- }
- //非事务处理
- public int ExecuteNonQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, int[] Sizes, object[] Values, ref ArrayList OutputValues, out string err)
- {
- err = "";
- int lines = -1;//受影响的行数
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return lines;
- }
- showsql(Sql);
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //给所有的参数赋值
- if (ParameterNames != null && DbTypes != null && Values != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- parameter.Direction = Directions[i];
- parameter.Size = Sizes[i];
- parameter.Value = Values[i];
- command.Parameters.Add(parameter);
- }
- }
- lines = command.ExecuteNonQuery();
- //返回输出参数值
- if (OutputValues != null)
- {
- for (int k = 0; k < command.Parameters.Count; k++)
- {
- if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
- {
- OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
- }
- }
- }
- }
- catch (Exception ex)
- {
- err = ex.Message;
- }
- finally
- {
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return lines;
- }
- public bool UpdateTable(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, DataTable dt, out string err)
- {
- err = "";
- bool result = true;
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- return false;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- return false;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return false;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- command.Transaction = trans;
- ((IDbDataAdapter)adapter).SelectCommand = command;
- //给所有的参数赋值
- if (Params != null && Values != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- }
- }
- //自动生成SqlCommand命令
- object CB = dataProvider.CreateCommandBuilder(adapter);
- //提交数据更改
- adapter.Update(dt);
- }
- catch (Exception ex)
- {
- err = ex.Message;
- trans.Rollback();
- result = false;
- }
- return result;
- }
- //非事务处理
- public bool UpdateTable(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, DataTable dt, out string err)
- {
- err = "";
- bool result = false;
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return false;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- ((IDbDataAdapter)adapter).SelectCommand = command;
- //给所有的参数赋值
- if (Params != null && Values != null)
- {
- for (int i = 0; i < Params.Length; i++)
- {
- command.Parameters.Add(Params[i]);
- ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
- }
- }
- //自动生成SqlCommand命令
- object CB = dataProvider.CreateCommandBuilder(adapter);
- //提交数据更改
- adapter.Update(dt);
- }
- catch (Exception ex)
- {
- err = ex.Message;
- result = false;
- }
- finally
- {
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return result;
- }
- //事务处理
- public bool UpdateTable(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, object[] Values, DataTable dt, out string err)
- {
- err = "";
- bool result = true;
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效!";
- cwl.WriteLog(err, LogInfoLevel.Error, "UpdateTable", "事务1");
- return false;
- }
- }
- else
- {
- err = "未找到请求的事务!";
- return false;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return false;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- command.Transaction = trans;
- //给所有的参数赋值
- if (ParameterNames != null && DbTypes != null && Values != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- parameter.Value = Values[i];
- command.Parameters.Add(parameter);
- }
- }
- ((IDbDataAdapter)adapter).SelectCommand = command;
- //自动生成SqlCommand命令
- object CB = dataProvider.CreateCommandBuilder(adapter);
- //提交数据更改
- adapter.Update(dt);
- }
- catch (Exception ex)
- {
- err = ex.Message;
- trans.Rollback();
- result = false;
- }
- return result;
- }
- //非事务处理
- public bool UpdateTable(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, object[] Values, DataTable dt, out string err)
- {
- err = "";
- bool result = true;
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, Sql);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return false;
- }
- try
- {
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
- IDbCommand command = conn.CreateCommand();
- command.CommandText = Sql;
- command.CommandType = cmdType;
- //给所有的参数赋值
- if (ParameterNames != null && DbTypes != null && Values != null)
- {
- for (int i = 0; i < ParameterNames.Length; i++)
- {
- IDbDataParameter parameter = dataProvider.CreateDataParameter();
- parameter.ParameterName = ParameterNames[i];
- if (conn is System.Data.OracleClient.OracleConnection)
- {
- try
- {
- ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
- }
- catch
- {
- parameter.DbType = DbTypes[i];
- }
- }
- else
- {
- parameter.DbType = DbTypes[i];
- }
- parameter.Value = Values[i];
- command.Parameters.Add(parameter);
- }
- }
- ((IDbDataAdapter)adapter).SelectCommand = command;
- //自动生成SqlCommand命令
- object CB = dataProvider.CreateCommandBuilder(adapter);
- //提交数据更改
- adapter.Update(dt);
- }
- catch (Exception ex)
- {
- err = ex.Message;
- result = false;
- }
- finally
- {
- //释放连接
- ReleaseDbConnection(dbName, priority, conn, Sql);
- }
- return result;
- }
- #endregion
- #region"基础操作"
- public IDbCommand GetCommand(string dbName, string priority, Guid guid, out string err)
- {
- err = "";
- //获取数据库连接...
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- trans = info.dbTransaction;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效";
- return null;
- }
- }
- else
- {
- //Console.WriteLine("更新DataSet<{0}>...\n", Sql);
- //获取数据库连接
- conn = GetDbConnection(dbName, priority, "GetCommand");
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return null;
- }
- IDbCommand command = conn.CreateCommand();
- return command;
- }
- public IDbTransaction GetTransaction(string dbName, string priority, Guid guid, out string err)
- {
- err = "";
- IDbConnection conn = null;
- IDbTransaction trans = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- trans = info.dbTransaction;
- conn = info.dbConnection;
- //如果事务已经失效,则返回
- if (trans.Connection == null)
- {
- err = "事务已经失效";
- return null;
- }
- }
- else
- {
- err = "没有事务!";
- return null;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return null;
- }
- return trans;
- }
- /// <summary>
- /// 获取连接提供者
- /// </summary>
- /// <param name="configurationString"></param>
- /// <returns></returns>
- private static DataProvider.IDataProvider GetDataProvider(string dbType)
- {
- DataProvider.IDataProvider dataProvider =
- (DataProvider.IDataProvider)_dataProviderNameList[dbType.ToUpper()];
- return dataProvider;
- }
- public DataProvider.IDataProvider GetDataProvider(string dbName, out string err)
- {
- err = "";
- return GetDataProvider(this.GetDbType(dbName, out err));
- }
- public DataProvider.IDataProvider GetDataProvider(Guid guid, out string err)
- {
- err = "";
- IDbConnection conn = null;
- //如果是事务
- if (_transList.Contains(guid))
- {
- //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
- TransInfo info = (TransInfo)_transList[guid];
- conn = info.dbConnection;
- }
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return null;
- }
- return GetDataProvider(conn.GetType());
- }
- private static DataProvider.IDataProvider GetDataProvider(System.Type dbType)
- {
- DataProvider.IDataProvider dataProvider =
- (DataProvider.IDataProvider)_dataProviderTypeList[dbType];
- return dataProvider;
- }
- public System.Guid BeginTransaction(string dbName, string priority, long dbManagerID, double minutes, out string err)
- {
- return BeginTransaction("", dbName, priority, dbManagerID, minutes, out err);
- }
- /// <summary>
- /// 开始处理事务,同时指定该事务最长处理时间,单位为分钟,返回结果表示是否成功
- /// 不支持嵌套事务
- /// </summary>
- /// <param name="dbName"></param>
- /// <param name="priority"></param>
- /// <param name="dbManagerID"></param>
- /// <param name="minutes"></param>
- /// <param name="err"></param>
- /// <returns></returns>
- public System.Guid BeginTransaction(string methodName, string dbName, string priority, long dbManagerID, double minutes, out string err)
- {
- lock (_transList)
- {
- err = "";
- Guid guid = Guid.NewGuid();
- //获取数据库连接
- IDbConnection conn = GetDbConnection(dbName, priority, methodName);
- if (conn == null)
- {
- err = "获取数据库连接失败!";
- return guid;
- }
- //设置事务信息,包括数据库连接、事务、事务开始时间等
- TransInfo info = new TransInfo();
- info.dbConnection = conn;
- info.beginTime = DateTime.Now;
- info.dbManagerID = dbManagerID;
- try
- {
- info.dbTransaction = conn.BeginTransaction(); ;
- _transList.Add(guid, info);
- }
- catch (Exception ex)
- {
- err = ex.Message;
- ReleaseDbConnection(dbName, priority, conn, err);
- }
- return guid;
- }
- }
- //提交当前事务,返回结果表示是否成功
- public bool Commit(string dbName, string priority, Guid guid, out string err)
- {
- lock (_transList)
- {
- bool result = true;
- err = "";
- if (!_transList.Contains(guid))
- {
- err = "不存在要提交的事务";
- return false;
- }
- TransInfo info = (TransInfo)_transList[guid];
- IDbConnection conn = info.dbConnection;
- IDbTransaction trans = info.dbTransaction;
- try
- {
- trans.Commit();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- result = false;
- cwl.WriteLog(err, LogInfoLevel.Error, "Rollback", "");
- }
- finally
- {
- //删除事务
- ReleaseDbConnection(dbName, priority, conn, "Commit:" + guid.ToString());
- _transList.Remove(guid);
- }
- return result;
- }
- }
- //回滚当前事务,返回结果表示是否成功
- public bool Rollback(string dbName, string priority, Guid guid, out string err)
- {
- lock (_transList)
- {
- bool result = true;
- err = "";
- if (!_transList.Contains(guid))
- {
- err = "不存在要回滚的事务";
- return false;
- }
- TransInfo info = (TransInfo)_transList[guid];
- IDbConnection conn = info.dbConnection;
- IDbTransaction trans = info.dbTransaction;
- try
- {
- trans.Rollback();
- }
- catch (Exception ex)
- {
- err = ex.Message;
- result = false;
- cwl.WriteLog(err, LogInfoLevel.Error, "Rollback", "");
- }
- finally
- {
- //删除事务
- ReleaseDbConnection(dbName, priority, conn, "Rollback:" + guid.ToString());
- _transList.Remove(guid);
- }
- return result;
- }
- }
- /// <summary>
- /// 从数据库配置文件中读取数据库连接信息
- /// </summary>
- /// <param name="fileName">文件名称</param>
- /// <returns>是否成功</returns>
- private bool ReadDbConnectionInfo(string fileName)
- {
- _dbConfigInfo = new Hashtable();
- //如果文件存在则读取配置文件
- if (File.Exists(fileName) == true)
- {
- try
- {
- XmlTextReader reader = null;
- try
- {
- //打开数据库配置文件,并忽略所有的空格
- reader = new XmlTextReader(fileName);
- reader.WhitespaceHandling = WhitespaceHandling.None;
- string dbName = "";
- DBConnectionInfo dbConnectionInfo = new DBConnectionInfo();
- dbConnectionInfo.connectionPool = new Hashtable();
- string type = "";
- string priority = "";
- string maxNum = "";
- //解释XML文件
- while (reader.Read())
- {
- //bool bFlag = false;
- switch (reader.NodeType)
- {
- case XmlNodeType.Element:
- type = reader.Name;
- break;
- case XmlNodeType.Text:
- if (type.Equals("name"))
- {
- dbName = reader.Value;
- dbConnectionInfo.dbName = dbName;
- }
- else
- {
- if (type.Equals("type"))
- {
- dbConnectionInfo.dbType = reader.Value;
- }
- else
- {
- if (type.Equals("connectionString"))
- {
- dbConnectionInfo.connectionString = reader.Value;
- }
- else
- {
- if (type.Equals("connectionPool"))
- {
- //dbConnectionInfo.connectionPool = new Hashtable();
- }
- else
- {
- if (type.Equals("priority"))
- {
- priority = reader.Value;
- }
- else
- {
- if (type.Equals("maxConnectionNum"))
- {
- maxNum = reader.Value;
- }
- }
- }
- }
- }
- }
- type = "";
- break;
- case XmlNodeType.EndElement:
- if (reader.Name.Equals("connectionPool"))
- {
- dbConnectionInfo.connectionPool.Add(priority, maxNum);
- priority = "";
- maxNum = "";
- }
- else
- {
- if (reader.Name.Equals("database"))
- {
- _dbConfigInfo.Add(dbName, dbConnectionInfo);
- dbName = "";
- dbConnectionInfo = new DBConnectionInfo();
- dbConnectionInfo.connectionPool = new Hashtable();
- }
- }
- break;
- }
- }
- }
- finally
- {
- if (reader != null)
- reader.Close();
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- else//读取默认设置
- {
- return false;
- }
- return true;
- }
- // 获取数据库连接
- private IDbConnection GetDbConnection(string dbName, string priority, string sqlstr)
- {
- IDbConnection conn = null;
- //直接从数据库连接池中取连接,无连接则直接返回
- Hashtable ht1 = (Hashtable)_connList[dbName];
- if (ht1 == null)
- {
- cwl.WriteLog("获取数据库连接失败!", LogInfoLevel.Message, "ht1:" + dbName, "GetDbConnection");
- return conn;
- }
- Hashtable ht2 = (Hashtable)ht1[priority];
- if (ht2 == null)
- {
- cwl.WriteLog("获取数据库连接失败!", LogInfoLevel.Message, "ht2:" + dbName + "/" + priority, "GetDbConnection");
- return conn;
- }
- lock (ht2)
- {
- ArrayList freeList = ht2[0] as ArrayList;
- //排队,最长时间1秒
- //{
- // for (int i = 0; i < 10; i++)
- // {
- // Thread.Sleep(100);
- // if (freeList.Count > 0)
- // {
- // i = 10;
- // }
- // }
- //}
- if (freeList.Count <= 0)
- {
- ArrayList al = ht2[1] as ArrayList;
- if (al == null) al = new ArrayList();
- cwl.WriteLog("数据库忙,请稍后再试!", LogInfoLevel.Message, "<<<>>> " + dbName + " <<<>>> freeList||" + al.Count.ToString(), "GetDbConnection");
- return null;
- }
- conn = (IDbConnection)freeList[0];
- freeList.Remove(conn);
- Hashtable busyList = (Hashtable)ht2[1];
- if (busyList == null)
- {
- busyList = new Hashtable();
- ht2.Add(1, busyList);
- }
- DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
- try
- {
- if (conn.State != ConnectionState.Open)
- {
- string strConnState = conn.State.ToString();
- conn.Close();
- conn.Dispose();
- conn = null;
- GC.Collect();
- foreach (DictionaryEntry it in _dbConfigInfo)
- {
- DBConnectionInfo info = (DBConnectionInfo)it.Value;
- if (info.dbName == dbName)
- {
- conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- cwl.WriteLog("重连成功!||连接状态:" + strConnState, LogInfoLevel.Message, info.dbName, "GetDbConnection");
- break;
- }
- }
- }
- }
- catch (Exception ex)
- {
- cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "GetDbConnection");
- return null;
- }
- CurrConnOperateInfo cco = new CurrConnOperateInfo();
- cco.dt = DateTime.Now;
- cco.sqlstr = sqlstr;
- cco.SID = dataProvider.GetSID(ref conn);
- busyList.Add(conn, cco);
- return conn;
- }
- }
- private void ReleaseDbConnection(string dbName, string priority, IDbConnection conn, string SqlText)
- {
- if (conn == null) { return; }
- Hashtable ht1 = (Hashtable)_connList[dbName];
- if (ht1 == null) { return; }
- Hashtable ht2 = (Hashtable)ht1[priority];
- if (ht2 == null) { return; }
- lock (ht2)
- {
- Hashtable busyList = (Hashtable)ht2[1];
- if (busyList != null)
- {
- if (!busyList.Contains(conn))
- {
- // 连接已被检验线程处理,此处不在处理
- //cwl.WriteLog(SqlText, LogInfoLevel.Message, "", "ReleaseDbConnection");
- return;
- }
- busyList.Remove(conn);
- }
- ArrayList freeList = ht2[0] as ArrayList;
- if (freeList == null)
- {
- freeList = new ArrayList();
- ht2.Add(0, freeList);
- }
- freeList.Add(conn);
- }
- }
- /// <summary>
- /// 初始化数据提供接口
- /// </summary>
- /// <param name="dataProvider"></param>
- public static void AddDataProvider(DataProvider.IDataProvider dataProvider)
- {
- _dataProviderNameList[dataProvider.Name.ToUpper()] = dataProvider;
- _dataProviderTypeList[dataProvider.ConnectionType] = dataProvider;
- }
- private void CreateAllConnections()
- {
- //如果连接已经创建,则返回
- if (_connList.Count > 0)
- {
- return;
- }
- foreach (DictionaryEntry it in _dbConfigInfo)
- {
- DBConnectionInfo info = (DBConnectionInfo)it.Value;
- DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
- Hashtable ht1 = new Hashtable();
- foreach (DictionaryEntry pool in info.connectionPool)
- {
- Hashtable ht2 = new Hashtable();
- ArrayList connList = new ArrayList();
- for (int i = 0; i < Convert.ToInt32(pool.Value); i++)
- {
- try
- {
- IDbConnection conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- connList.Add(conn);
- }
- catch (Exception ex)
- {
- cwl.WriteLog("创建数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "失败!", LogInfoLevel.Error, info.dbName, "CreateAllConnections");
- break;
- }
- }
- ht2.Add(0, connList);
- ht1.Add(pool.Key, ht2);
- }
- _connList.Add(info.dbName, ht1);
- }
- cwl.WriteLog("启动成功!数据库连接池创建成功!");
- }
- #region 原来代码 maliang 2011-10-19
- /*
- private void FixConnections()
- {
- while (true)
- {
- try
- {
- foreach (DictionaryEntry it in _dbConfigInfo)
- {
- DBConnectionInfo info = (DBConnectionInfo)it.Value;
- DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
- Hashtable ht1 = (Hashtable)_connList[info.dbName];
- foreach (DictionaryEntry pool in info.connectionPool)
- {
- Hashtable ht2 = (Hashtable)ht1[pool.Key];
- lock (ht2)
- {
- ArrayList connList = ht2[0] as ArrayList;
- Hashtable busyConnList = (Hashtable)ht2[1];
- int connNumber = 0;
- if (connList != null)
- {
- connNumber = connList.Count;
- }
- else
- {
- connList = new ArrayList();
- ht2.Remove(0);
- ht2.Add(0, connList);
- }
- if (busyConnList != null)
- {
- connNumber += busyConnList.Count;
- }
- if (connNumber < Convert.ToInt32(pool.Value))
- {
- cwl.WriteLog("有数据库连接意外销毁,增加数据库连接!", LogInfoLevel.Message, info.dbName, "FixConnections");
- for (int i = connNumber; i < Convert.ToInt32(pool.Value); i++)
- {
- try
- {
- IDbConnection conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- connList.Add(conn);
- cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "成功!", LogInfoLevel.Message, info.dbName, "FixConnections");
- }
- catch (Exception ex)
- {
- cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "失败!", LogInfoLevel.Error, info.dbName, "FixConnections");
- Console.WriteLine("增加数据库连接" + info.dbName + " " + pool.Key + " " + "失败!" + ex.Message + "\n");
- break;
- }
- }
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "FixConnections");
- }
- Thread.Sleep(3 * 60 * 1000);
- }
- }
- private void CheckConnActive()
- {
- while (true)
- {
- try
- {
- if (_init)
- {
- foreach (DictionaryEntry it in _connList)
- {
- Hashtable ht1 = (Hashtable)it.Value;
- string dbName = it.Key as string;
- DBConnectionInfo info = (DBConnectionInfo)_dbConfigInfo[dbName];
- DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
- foreach (DictionaryEntry it2 in ht1)
- {
- ArrayList connList = ((Hashtable)it2.Value)[0] as ArrayList;
- #region // 检查闲列表
- //for ( int l = 0 ; l< connList.Count ;l++)
- //{
- // IDbConnection conn = connList[l] as IDbConnection ;
- // if(conn!=null)
- // {
- // if(!dataProvider.Ping(ref conn) )
- // {
- // //Thread.Sleep( 1000);
- // //if(!dataProvider.Ping(ref conn) )
- // //{
- // cwl.WriteLog("连接失效,重新连接中......", LogInfoLevel.Message, info.dbName, "CheckConnActive");
- // Console.WriteLine(info.dbName + "连接失效,重新连接中......\n");
- // //connList.Remove(conn);
- // if (conn != null )
- // {
- // conn.Close();
- // conn.Dispose();
- // conn = null;
- // GC.Collect();
- // }
- // try
- // {
- // conn = dataProvider.CreateConnectionObject(info.connectionString);
- // conn.Open();
- // connList[l] = conn;
- // cwl.WriteLog("重连成功!", LogInfoLevel.Message, info.dbName, "CheckConnActive");
- // Console.WriteLine(info.dbName + "重连成功!\n");
- // }
- // catch(Exception ex)
- // {
- // cwl.WriteLog("重连失败!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- // Console.WriteLine(info.dbName + "重连失败!" +ex.Message + "\n");
- // }
- // //}
- // }
- // }
- // else
- // {
- // try
- // {
- // conn = dataProvider.CreateConnectionObject(info.connectionString);
- // conn.Open();
- // connList[l]= conn;
- // Console.WriteLine(info.dbName + "重连成功!\n");
- // cwl.WriteLog("重连成功!", LogInfoLevel.Message, info.dbName, "CheckConnActive");
- // }
- // catch(Exception ex)
- // {
- // Console.WriteLine("重连失败!" + ex.Message + "\n");
- // cwl.WriteLog("重连失败!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- // }
- // }
- //}
- #endregion
- #region // 检查忙列表
- if (((Hashtable)it2.Value).Count < 2) continue;
- Hashtable busyConnList = ((Hashtable)it2.Value)[1] as Hashtable;
- if (busyConnList != null)
- {
- Hashtable m_busyConnList = busyConnList.Clone() as Hashtable;
- foreach (DictionaryEntry busyConn in m_busyConnList)
- {
- DateTime dt = ((CurrConnOperateInfo)busyConn.Value).dt;
- DateTime t = DateTime.Now;
- if ((string)it2.Key == "A")
- {
- t = dt.AddSeconds(_connLifeTimeA);
- }
- else if ((string)it2.Key == "B")
- {
- t = dt.AddSeconds(_connLifeTimeB);
- }
- else if ((string)it2.Key == "C")
- {
- t = dt.AddSeconds(_connLifeTimeC);
- }
- #region //判断是否已经超时
- if (t.CompareTo(DateTime.Now) < 0)
- {
- IDbConnection conn = busyConn.Key as IDbConnection;
- if (conn != null)
- {
- try
- {
- cwl.WriteLog("有连接超时,将关闭重连!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString()
- + " SID:" + ((CurrConnOperateInfo)busyConn.Value).SID.ToString()
- + " SQL:" + ((CurrConnOperateInfo)busyConn.Value).sqlstr
- + " 执行开始时间:" + ((CurrConnOperateInfo)busyConn.Value).dt.ToLongTimeString()
- + " 当前时间:" + DateTime.Now.ToLongTimeString(),
- LogInfoLevel.Error, info.dbName, "CheckConnActive");
- busyConnList.Remove(conn);
- conn.Close();
- conn.Dispose();
- conn = null;
- GC.Collect();
- conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- if (connList == null)
- {
- connList = new ArrayList();
- ht1.Remove(0);
- ht1.Add(0, connList);
- }
- connList.Add(conn);
- cwl.WriteLog("超时连接重连成功!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString(),
- LogInfoLevel.Message, info.dbName, "CheckConnActive");
- }
- catch (Exception ex)
- {
- cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
- }
- }
- else
- {
- try
- {
- cwl.WriteLog("有连接失效,将关闭重连!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- Console.WriteLine(info.dbName + "有连接失效,将关闭重连!\n");
- busyConnList.Remove(conn);
- conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- if (connList == null)
- {
- connList = new ArrayList();
- ht1.Remove(0);
- ht1.Add(0, connList);
- }
- connList.Add(conn);
- }
- catch (Exception ex)
- {
- cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
- }
- }
- }
- #endregion
- }
- }
- #endregion
- }
- }
- }
- }
- catch (Exception ex)
- {
- cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "CheckConnActive");
- // Console.WriteLine(ex.Message);
- }
- Thread.Sleep(1 * 60 * 1000);
- }
- }
- */
- #endregion
- #region 变更代码 maliang 2011-10-19
- private static object lockObj = new object();
- private void ConnectionsListener()
- {
- while (true)
- {
- lock (lockObj)
- {
- CheckConnActive();
- FixConnections();
- Thread.Sleep(1 * 60 * 1000);
- }
- }
- }
- private void FixConnections()
- {
- try
- {
- foreach (DictionaryEntry it in _dbConfigInfo)
- {
- DBConnectionInfo info = (DBConnectionInfo)it.Value;
- DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
- Hashtable ht1 = (Hashtable)_connList[info.dbName];
- foreach (DictionaryEntry pool in info.connectionPool)
- {
- Hashtable ht2 = (Hashtable)ht1[pool.Key];
- lock (ht2)
- {
- ArrayList connList = ht2[0] as ArrayList;
- Hashtable busyConnList = (Hashtable)ht2[1];
- int connNumber = 0;
- if (connList != null)
- {
- connNumber = connList.Count;
- }
- else
- {
- connList = new ArrayList();
- ht2.Remove(0);
- ht2.Add(0, connList);
- }
- if (busyConnList != null)
- {
- connNumber += busyConnList.Count;
- }
- if (connNumber < Convert.ToInt32(pool.Value))
- {
- cwl.WriteLog("有数据库连接意外销毁,增加数据库连接!", LogInfoLevel.Message, info.dbName, "FixConnections");
- for (int i = connNumber; i < Convert.ToInt32(pool.Value); i++)
- {
- try
- {
- IDbConnection conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- connList.Add(conn);
- cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "成功!", LogInfoLevel.Message, info.dbName, "FixConnections");
- }
- catch (Exception ex)
- {
- cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "失败!", LogInfoLevel.Error, info.dbName, "FixConnections");
- Console.WriteLine("增加数据库连接" + info.dbName + " " + pool.Key + " " + "失败!" + ex.Message + "\n");
- break;
- }
- }
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "FixConnections");
- }
- }
- private void CheckConnActive()
- {
- try
- {
- if (_init)
- {
- foreach (DictionaryEntry it in _connList)
- {
- Hashtable ht1 = (Hashtable)it.Value;
- string dbName = it.Key as string;
- DBConnectionInfo info = (DBConnectionInfo)_dbConfigInfo[dbName];
- DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
- foreach (DictionaryEntry it2 in ht1)
- {
- ArrayList connList = ((Hashtable)it2.Value)[0] as ArrayList;
- #region // 检查忙列表
- if (((Hashtable)it2.Value).Count < 2) continue;
- Hashtable busyConnList = ((Hashtable)it2.Value)[1] as Hashtable;
- if (busyConnList != null)
- {
- Hashtable m_busyConnList = busyConnList.Clone() as Hashtable;
- foreach (DictionaryEntry busyConn in m_busyConnList)
- {
- DateTime dt = ((CurrConnOperateInfo)busyConn.Value).dt;
- DateTime t = DateTime.Now;
- if ((string)it2.Key == "A")
- {
- t = dt.AddSeconds(_connLifeTimeA);
- }
- else if ((string)it2.Key == "B")
- {
- t = dt.AddSeconds(_connLifeTimeB);
- }
- else if ((string)it2.Key == "C")
- {
- t = dt.AddSeconds(_connLifeTimeC);
- }
- #region //判断是否已经超时
- if (t.CompareTo(DateTime.Now) < 0)
- {
- IDbConnection conn = busyConn.Key as IDbConnection;
- if (conn != null)
- {
- try
- {
- cwl.WriteLog("有连接超时,将关闭重连!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString()
- + " SID:" + ((CurrConnOperateInfo)busyConn.Value).SID.ToString()
- + " SQL:" + ((CurrConnOperateInfo)busyConn.Value).sqlstr
- + " 执行开始时间:" + ((CurrConnOperateInfo)busyConn.Value).dt.ToLongTimeString()
- + " 当前时间:" + DateTime.Now.ToLongTimeString(),
- LogInfoLevel.Error, info.dbName, "CheckConnActive");
- busyConnList.Remove(conn);
- conn.Close();
- conn.Dispose();
- conn = null;
- GC.Collect();
- conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- if (connList == null)
- {
- connList = new ArrayList();
- ht1.Remove(0);
- ht1.Add(0, connList);
- }
- connList.Add(conn);
- cwl.WriteLog("超时连接重连成功!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString(),
- LogInfoLevel.Message, info.dbName, "CheckConnActive");
- }
- catch (Exception ex)
- {
- cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
- }
- }
- else
- {
- try
- {
- cwl.WriteLog("有连接失效,将关闭重连!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- Console.WriteLine(info.dbName + "有连接失效,将关闭重连!\n");
- busyConnList.Remove(conn);
- conn = dataProvider.CreateConnectionObject(info.connectionString);
- conn.Open();
- if (connList == null)
- {
- connList = new ArrayList();
- ht1.Remove(0);
- ht1.Add(0, connList);
- }
- connList.Add(conn);
- }
- catch (Exception ex)
- {
- cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
- Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
- }
- }
- }
- #endregion
- }
- }
- #endregion
- }
- }
- }
- }
- catch (Exception ex)
- {
- cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "CheckConnActive");
- // Console.WriteLine(ex.Message);
- }
- }
- #endregion
- ///////////////////////////////////////////////////////////////////////////////
- ///私有数据成员
- //////////////////////////////////////////////////////////////////////////////
- //定义数据库连接信息
- private struct DBConnectionInfo
- {
- public string dbName;
- public string dbType;
- public string connectionString;
- // <Key = priority Value = maxConnectionNum/>
- public Hashtable connectionPool;
- };
- // 存储当前连接的操作信息
- private struct CurrConnOperateInfo
- {
- public DateTime dt;
- public string sqlstr;
- public int SID;
- }
- /// <summary>
- /// 事务信息
- /// </summary>
- private struct TransInfo
- {
- public long dbManagerID;
- public IDbConnection dbConnection;
- public IDbTransaction dbTransaction;
- public DateTime beginTime;
- };
- private void showsql(string sql)
- {
- //Console.WriteLine(sql+"\n");
- }
- #endregion
- private static long[] _dbManagerID = new long[1] { 0 };//由DBProxy为每个DBManager对象分配的ID
- //<Key = name Value DBConnectionInfo>
- private Hashtable _dbConfigInfo;//数据库配置信息
- private static Hashtable _connList = new Hashtable();
- private Hashtable _transList = new Hashtable();
- private Hashtable _dbList = new Hashtable();//每个DBManager对应的数据库信息
- private double _connLifeTimeA;//数据库连接允许的最长无反应时间A级
- private double _connLifeTimeB;//数据库连接允许的最长无反应时间B级
- private double _connLifeTimeC;//数据库连接允许的最长无反应时间C级
- private Thread _checkConnThread;//检查Conn是否有效
- private Thread _fixConnThread;//检查Conn是否有足够数量
- private Thread _ConnectionsListenerThread;//检查Conn是否有效和是否有足够数量
- private long _reference = 0;//DBProxy对象实例数
- private bool _init = false;
- }
- }
|