• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            kenlistian

            厚積薄發(fā). 勤為槳,思為帆

               :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理 ::
              73 隨筆 :: 4 文章 :: 22 評(píng)論 :: 0 Trackbacks

                一般來說,和數(shù)據(jù)庫(kù)連接通常不容易斷鏈,但是特別做些服務(wù)性質(zhì)的,無人監(jiān)守的程序時(shí),則要考慮數(shù)據(jù)庫(kù)連接的ado發(fā)生斷鏈時(shí)的情況。在這種情況下,考慮建立數(shù)據(jù)庫(kù)鏈路檢測(cè)異常保護(hù)就是非常重要的。

            通常,與數(shù)據(jù)庫(kù)連接中斷有以下2種情況:

            1。數(shù)據(jù)庫(kù)服務(wù)器服務(wù)停止,
            2。與數(shù)據(jù)庫(kù)服務(wù)器之間的網(wǎng)絡(luò)發(fā)生中斷


            采用如下代碼在使用做pRs做open查詢操作時(shí),拋出異常,此異常可判斷為到數(shù)據(jù)庫(kù)服務(wù)器的連接發(fā)生中斷
            Error   number:   80004005
            [DBNETLIB][ConnectionWrite (WrapperWrite()).]一般性網(wǎng)絡(luò)錯(cuò)誤。請(qǐng)檢查網(wǎng)絡(luò)文檔。
            SQLState   :   08S0
            NativeError   :   b

            當(dāng)pConn在Close,重新Open連接會(huì)發(fā)生異常,此異常是重新連接時(shí)拋出的。此時(shí)可判斷為到遠(yuǎn)程服務(wù)器的連接完全中斷
            Error   number:   80004005
            [DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒絕訪問。
            SQLState   :   08001
            NativeError   :   11

            檢測(cè)代碼基本如下,此代碼的部分參考自ADO手冊(cè),并加以部分的修改
            for(;;)
            {
                try {
                    if   (g_isConnected) {
                            pRs-> Open(_bstr_t(“select 1”),  _variant_t((IDispatch*)pConn,true), adOpenStatic,
                                               adLockReadOnly, adCmdText);
                            if (pRs)
                                if   (pRs-> State == adStateOpen)
                                      pRs-> Close();
                    } else {
                         if   (pConn)
                             if   (pConn->State   ==   adStateOpen)
                                    pConn->Close();
                         pConn->Open(_bstr_t(strCnn),_bstr_t(""),_bstr_t(""),adModeUnknown);   //重新打開連接
                         isConnected=TRUE;
                    }
               }
               catch   (_com_error   &pCome)
               {

                      _variant_t   vtConnect   =   (_variant_t)(pConn.GetInterfacePtr());//pRs-> GetActiveConnection();
                      switch(vtConnect.vt)
                     {
                            case   VT_BSTR:
                                    PrintComError(pCome);
                                    break;
                            case   VT_DISPATCH:
                                     PrintProviderError(vtConnect);
                                     break;
                           default:
                                 printf( "Errors   occured. ");
                                break;
                       }
                       isConnected=   FALSE;
                 }
                 Sleep(1000);
            }
            void   PrintProviderError(_ConnectionPtr   pConnection)
            {
                         ErrorPtr     pErr     =   NULL;
                         if(   (pConnection-> Errors-> Count)   >   0)
                        {
                                long   nCount   =   pConnection-> Errors-> Count;
                               for(long   i   =   0;   i   <   nCount;   i++)
                               {
                                      pErr   =   pConnection-> Errors-> GetItem(i);
                                      TRACE( "Error   number:   %x\n%s\n ",   pErr-> Number,  (LPCSTR)pErr-> Description);
                                      TRACE( "SQLState   :   %s\n ",   (LPCTSTR)pErr-> SQLState);
                                      TRACE( "NativeError   :   %x\n ",   pErr-> NativeError);
                              }
                        }
            }

            void   PrintComError(_com_error   &e)
            {
                _bstr_t   bstrSource(e.Source());
               _bstr_t   bstrDescription(e.Description());
               //   Print   Com   errors.    
                TRACE( "Error\n ");
                TRACE( "\tCode   =   %08lx\n ",   e.Error());
                TRACE( "\tCode   meaning   =   %s\n ",   e.ErrorMessage());
                TRACE( "\tSource   =   %s\n ",   (LPCSTR)   bstrSource);
                TRACE( "\tDescription   =   %s\n ",   (LPCSTR)   bstrDescription);
            }

             

            把它整理成到一個(gè)線程中不斷作為數(shù)據(jù)庫(kù)鏈路檢測(cè),發(fā)現(xiàn)該連接斷開則返回連接來處理。測(cè)試代碼附文。我用的sql server數(shù)據(jù)庫(kù)做測(cè)試過。源碼下載位置:

            http://www.pudn.com/downloads95/sourcecode/database/detail389188.html

            posted on 2008-01-06 00:03 kenlistian 閱讀(835) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            午夜精品久久久久久影视777| 18禁黄久久久AAA片| 久久人人添人人爽添人人片牛牛| 久久夜色精品国产亚洲| 东京热TOKYO综合久久精品| 久久久久亚洲AV无码麻豆| 少妇久久久久久久久久| 国产精品国色综合久久| 久久se精品一区二区| 99国内精品久久久久久久| 7国产欧美日韩综合天堂中文久久久久 | 93精91精品国产综合久久香蕉| 亚洲国产精品久久| 久久播电影网| 精品伊人久久大线蕉色首页| 色欲综合久久躁天天躁蜜桃| 久久99国内精品自在现线| 色成年激情久久综合| 国产午夜精品久久久久九九| 亚洲国产精品成人久久蜜臀 | 91精品国产91久久久久久青草| 国产午夜精品久久久久九九电影| 久久黄视频| 亚洲色大成网站WWW久久九九| 精品精品国产自在久久高清| 久久久久免费视频| 久久精品中文字幕无码绿巨人| 99久久精品国产综合一区 | 亚洲伊人久久精品影院| 久久伊人精品青青草原高清| 久久亚洲国产成人影院网站| 久久丫精品国产亚洲av不卡 | 久久综合九色综合欧美狠狠| 久久av高潮av无码av喷吹| 无码超乳爆乳中文字幕久久| 久久国产香蕉一区精品| 国产精品久久久亚洲| 精品国产乱码久久久久久人妻 | 国产精品亚洲综合专区片高清久久久 | 精品久久国产一区二区三区香蕉 | 日韩美女18网站久久精品|