| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889 |
- 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;
- using NHibernate;
- using NHibernate.Cfg;
- 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());
-
-
- //从数据库配置文件中读取数据库连接信息
- ReadDbConnectionInfo(@"MesDB.cfg");
-
- Console.WriteLine("创建数据库代理DBProxy...\n");
-
- //预先创建所有连接...
- 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
- System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
- timer.Interval = 1 * 60 * 1000;
- timer.Tick += new EventHandler(timer_Tick);
- timer.Start();
- GC.KeepAlive(timer);
- #endregion
- //_init = true;
- _reference++;
- }
- void timer_Tick(object sender, EventArgs e)
- {
- ConnectionsListener();
- }
- //没有显示调用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();
- // }
- // }
- // }
- //}
- //add longjing 10-9
- foreach (DictionaryEntry po in pool)
- {
- ISessionFactory factory = (ISessionFactory)po.Value;
-
- factory.Close();
- }
- }
- }
- // 关闭线程
- //try
- //{
- // if (_ConnectionsListenerThread != null)
- // {
- // _ConnectionsListenerThread.Abort();
- // }
- //}
- //catch { }
- //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");
- }
- //////add longjing////////
- bool logflag = false;
- try
- {
- logflag = Convert.ToBoolean(GetConfigAttribute("ShowLog"));
-
- }
- catch { }
- if (logflag)
- {
-
- cwl.WriteLog(logflag, ds, Sql);
- }
- /////////////////////////
- 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);
-
- ISession session = null;
- IDbConnection conn = null;
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if(session!=null)
- session.Close();
-
- }
- //////add longjing////////
- bool logflag = false;
- try
- {
- logflag = Convert.ToBoolean(GetConfigAttribute("ShowLog"));
- }
- catch { }
- if (logflag)
- {
-
- cwl.WriteLog(logflag, ds, 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;
- ISession session = null;
- //conn = GetDbConnection(dbName, Sql);
- //conn = GetDbConnection(dbName, priority, Sql);
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
- }
- //////add longjing////////
- bool logflag = false;
- try
- {
- logflag = Convert.ToBoolean(GetConfigAttribute("ShowLog"));
- }
- catch { }
- if (logflag)
- {
- //cwl.WriteLog(logflag, ds, Sql, "ExecuteQuery", "ExecuteQueryDBLink");
- cwl.WriteLog(logflag, ds, 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();
- }
- //////add longjing////////
- bool logflag = false;
- try
- {
- logflag = Convert.ToBoolean(GetConfigAttribute("ShowLog"));
- }
- catch { }
- if (logflag)
- {
-
- cwl.WriteLog(logflag, ds, Sql);
- }
- /////////////////////////
- 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, Sql);
- ISession session = null;
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
- }
- //////add longjing////////
- bool logflag = false;
- try
- {
- logflag = Convert.ToBoolean(GetConfigAttribute("ShowLog"));
- }
- catch { }
- if (logflag)
- {
-
- cwl.WriteLog(logflag, ds, 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, Sql);
- ISession session = null;
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
- }
- 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, Sql);
- ISession session = null;
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
- }
- 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, Sql);
- ISession session = null;
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
- }
- 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;//受影响的行数
- ISession session = null;
- //获取数据库连接...
- IDbConnection conn = null;
- //获取数据库连接
-
- //conn = GetDbConnection(dbName, Sql);
-
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
-
-
- }
- 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, Sql);
- ISession session = null;
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
- }
- 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, Sql);
- ISession session = null;
- session = GetSession(dbName, Sql);
- conn = session.Connection;
- 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);
- if (session != null)
- session.Close();
- }
- 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, "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, methodName);
- IDbConnection conn = null;
- ISession session = null;
- session = GetSession(dbName, methodName);
- conn = session.Connection;
-
- 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);
- if (session != null)
- session.Close();
- }
- 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("connectionDriver"))
- {
- dbConnectionInfo.connectionDriver = reader.Value;
- }
- else
- {
- if (type.Equals("connectionDialect"))
- {
- dbConnectionInfo.connectionDialect = 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;
- }
- // 获取Session
- private ISession GetSession(string dbName, string sqlstr)
- {
- ISession session = null;
-
- try
- {
- if (pool.Count > 0)
- {
- session = (pool[dbName] as ISessionFactory).OpenSession();
- return session;
- }
- else
- {
- return null;
- }
- }
- catch (Exception ex)
- {
- cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "GetSession");
- return null;
- }
- }
- //add longjing 10-8 动态获取配置节点的值
- private string GetConfigAttribute(string appKey)
- {
- XmlDocument xDoc = new XmlDocument();
- try
- {
- xDoc.Load(System.Windows.Forms.Application.ExecutablePath + ".config");
- XmlNode xNode;
- XmlElement xElem;
- xNode = xDoc.SelectSingleNode("//appSettings");
- xElem = (XmlElement)xNode.SelectSingleNode("//add[@key='" + appKey + "']");
- if (xElem != null)
- return xElem.GetAttribute("value");
- else
- return "";
- }
- catch (Exception)
- {
- return "";
- }
- }
- /////
- //// 获取数据库连接
- //private IDbConnection GetDbConnection(string dbName, string sqlstr)
- //{
- // ISession session = null;
- // IDbConnection conn = null;
- // try
- // {
- // if (pool.Count > 0)
- // {
- // session = (pool[dbName] as ISessionFactory).OpenSession();
- // conn = session.Connection;
-
- // return conn;
- // }
- // else
- // {
- // return null;
- // }
- // }
- // catch (Exception ex)
- // {
- // cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "GetDbConnection");
- // return null;
- // }
- //}
- //// 获取数据库连接
- //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;
- }
- Hashtable pool = new Hashtable();
- private void CreateAllConnections()
- {
- try
- {
- //如果连接已经创建,则返回
- if (pool.Count > 0)
- {
- return;
- }
- if (_dbConfigInfo.Count != 0)
- {
- foreach (DictionaryEntry it in _dbConfigInfo)
- {
- DBConnectionInfo info = (DBConnectionInfo)it.Value;
- DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
- ISessionFactory factory = NHibernateHelper.NHibernateHelper.GetSessionFactory(info.connectionDialect, info.connectionDriver, info.connectionString);
- //IDbConnection conn = session.Connection;
- pool.Add(info.dbName, factory);
-
- //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("启动成功!数据库连接池创建成功!");
- }
- }
- catch(Exception ex)
- {
- cwl.WriteLog("数据库连接池创建失败!原因是:"+ex.Message);
- }
- }
- #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()
- {
- lock (lockObj)
- {
- //CheckConnActive();
- FixConnections();
- }
- }
- 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;
- //add long
- public string connectionDriver;
- public string connectionDialect;
-
- //public Hashtable connectionPool;
- };
- //////定义数据库连接信息
- //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;
- }
- }
|