| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555 |
- 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;
- using System.Configuration;
- 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(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["connLifeTimeA"].Value.ToString().ToLower());
- _connLifeTimeB = int.Parse(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["connLifeTimeB"].Value.ToString().ToLower());
- _connLifeTimeC = int.Parse(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["connLifeTimeC"].Value.ToString().ToLower());
- //创建一个线程,用来定时清除已经断开连接的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;
- }
- }
|