• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        用VC訪問Sybase數據庫

        用VC訪問Sybase數據庫

        更新時間:2022-05-07 文章作者:未知 信息來源:網絡 閱讀次數:

        關鍵字     Sybase,數據庫訪問,ct-library接口
          
            前段我在做一個項目時,要用到通過Sybase客戶端連接網絡Sybase數據庫的問題。

        在此之前,我做過好多access,SQL server數據庫的項目,都是用ADO技術來實現的。但是這一次,領導要求用Sybase數據庫提供的ct-library接口,所以一下子以前所知道的數據庫訪問技術都沒有了用武之地,我當時在csdn上發過貼子,問過這個問題,但回應很少,現在這個問題已解決了,我想寫出來,和大家一塊探討,共同學習,也好給以后遇到這個問題的人一個入門指導。
            首先,必須安裝Sybase客戶端并配置Sybase客戶端。安裝完成后要從程序中運行

        dsedit進行配置。server為要訪問的數據庫的名字,還有Sybase數據庫所在機子的IP和

        Port及訪問的協議TCP;不會配置的,可以請教一下身邊的高手。
                   當配置完畢后,可以用ping來檢查配置的正確性。
            下面就進入到編程了。
            在此,你還要讓你的工程包含Sybase的頭文件和動態鏈接庫。讓程序能認識Sybase

        函數。打Tool--->Options后,選擇Directories標簽,Show directories for 中選擇

        Include files后,你就可以增加Sybase的包含:例我這里Sybase是安裝在C:所以我指

        定為:C:\sybase\include;同樣,再選擇Library files指定:C:\sybase\lib,就ok了。
            1.包含頭文件。在你要連接Sybase數據庫代碼的頭文件中添加#include

        <ctpublic.h>,此時你就可以編譯一下,如果說找不到此頭文件,說明你上面包含指定的路徑不正確。
            2.聲明兩個連接 Sybase 數據庫必須的變量。
        CS_CONTEXT         *context;  /* 內容結構 */
        CS_CONNECTION      *ptrconnection; /* 連接結構 */
             我個人認為用ct-library接口訪問sybase數據庫與用ADO技術有很多相似之處,也

        可以說訪問數據庫一般差不多,都是先創建空間,再創建連接。
               并初始化context:      context = (CS_CONTEXT *)NULL;
            3.我定義了下面幾個函數:
        BOOL  ConnectSybaseDB(CString strDBName,CString strUser,CString

        strPass); //連接數據庫:true成功,false失敗 其參數分別為:數據庫名,訪問數據庫

        的用戶名,密碼。這個strDBName就是Sybase客啟端配置時的Server名字。
        void    DisConnectSybaseDB();         //斷開數據庫
        void    ShowDBError(int  nErrCode);   //顯示連接數據庫時的錯誤信息
           4.具體實現:
        //////////////**********建立連接函數***********//////////////
               ConnectSybaseDB(CString strDBName,CString strUser,CString strPass)
        {
        CS_RETCODE     ret;
        char username[32],password[32];
        memset(username,0,sizeof(username));
        memset(password,0,sizeof(password));
             strcpy(username,strUser);
        strcpy(password,strPassword);
        /*分配內容結構*/
        if((ret=cs_ctx_alloc(CS_VERSION_100, &context)) != CS_SUCCEED)
        {   //不成功則調用ShowDBError顯示錯誤代碼
          ShowDBError(ret);
          return FALSE;
        }
        /*初始化Client_Library*/
        if((ret=ct_init(context,CS_VERSION_100)) != CS_SUCCEED)
        {
          ShowDBError(ret);
          return FALSE;
        }
        /*分配連接結構*/
        if((ret=ct_con_alloc(context,&ptrconnection))!=CS_SUCCEED)
        {
          ShowDBError(ret);
          return FALSE;
        }
        /*設置用戶名和口令*/
        if((ret=ct_con_props(ptrconnection,CS_SET,CS_USERNAME,username,CS_NULLTERM,NU

        LL))!=CS_SUCCEED)
        {
          ShowDBError(ret);
          return FALSE;
        }


        if((ret=ct_con_props(ptrconnection,CS_SET,CS_PASSWORD,password,CS_NULLTERM,NU

        LL))!=CS_SUCCEED)
        {
          ShowDBError(ret);
          return FALSE;
        }
        /*建立連接*/
        char instance[20];
        strcpy(instance,strDBName);
        if((ret=ct_connect(ptrconnection, (CS_CHAR *)instance,

        sizeof(instance))) != CS_SUCCEED)
        {

          ShowDBError(ret);
          return FALSE;
        }
        else
          return TRUE;
        }
        //////////////**********斷開連接函數***********//////////////
                void    DisConnectSybaseDB()
        {
        CS_RETCODE ret;
          if ((ret = ct_close(ptrconnection, CS_UNUSED))!= CS_SUCCEED)
        {
          ShowDBError(ret);
        }
        if ((ret = ct_con_drop(ptrconnection)) != CS_SUCCEED)/*釋放資源*/
        {
          ShowDBError(ret);
        }
        if((ret=ct_exit(context,CS_UNUSED))!=CS_SUCCEED)/*關閉與服務器的所有

        連接,退出CT-L*/
        {
          ShowDBError(ret);
        }
        if((ret=cs_ctx_drop(context))!=CS_SUCCEED)/*釋放環境結構占用的資源*/
        {
          ShowDBError(ret);
        }
            context = (CS_CONTEXT *)NULL;
                return;
        }
        //////////////**********顯示錯誤代碼函數***********//////////////
           void    ShowDBError(int  nErrCode)
        {
        CString strDBErrorInfo;
        switch(nErrCode)
        {
        case CS_MEM_ERROR:  
          strcpy(strDBErrorInfo, "內存不足或地址分配錯誤!");   
          break;
        case CS_PENDING:
          strcpy(strDBErrorInfo, "異步網絡I/O正在進行!");   
          break;
        case CS_BUSY:
          strcpy(strDBErrorInfo, "當前連接內有一異步操作正在進行!");
          break;
        case CS_CANCELED:
          strcpy(strDBErrorInfo, "操作被取消!");
          break;
        case CS_END_RESULTS:
          strcpy(strDBErrorInfo, "從服務器返回的結果處理結束!");
          break;
        case CS_ROW_FAIL:
          strcpy(strDBErrorInfo, "提取當前行的數據失敗!");
          break;
        case CS_END_DATA:
          strcpy(strDBErrorInfo, "數據提取結束!");
          break;
        case CS_FAIL:
          strcpy(strDBErrorInfo, "函數執行失敗!");
          break;  
        default:
          strcpy(strDBErrorInfo, "系統不識別的錯誤!");
          break;  
        }
        AfxMessageBox(strDBErrorInfo);

        }

           以上是簡單的連接斷開與顯示錯誤信息的一些代碼,供大家參考。請大家多指導,和

        大家共同進步。我的信箱:moorhen@263.net 如轉載請標明作者:luckyegg

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 免费一级大黄特色大片| 免费无码精品黄AV电影| 亚洲人成无码久久电影网站| 亚洲国产aⅴ成人精品无吗| 四虎www免费人成| 亚洲AV综合色区无码一二三区| 免费毛片在线看片免费丝瓜视频 | 国产成人免费a在线视频色戒| 中国china体内裑精亚洲日本| 99久久99久久精品免费看蜜桃| 亚洲精品人成网在线播放影院| 成人免费AA片在线观看| 亚洲精品中文字幕| 日产国产精品亚洲系列| 国产特黄一级一片免费 | 亚洲AV女人18毛片水真多| 成人性生交大片免费看中文| 可以免费观看的毛片| 成人免费视频88| 亚洲毛片免费观看| 亚洲国产精品久久久久秋霞小| 热99re久久精品精品免费| 日韩亚洲人成在线综合| 亚洲精品成人a在线观看| 国产精品福利片免费看| 亚洲色大成网站www永久| 好爽又高潮了毛片免费下载| 国产99久久亚洲综合精品| 亚洲人成网77777亚洲色| 91嫩草免费国产永久入口| 亚洲av无码成人精品区一本二本| 亚洲国产综合人成综合网站| 日韩精品极品视频在线观看免费| 亚洲综合伊人制服丝袜美腿| 免费a级毛片无码a∨性按摩| 国产猛男猛女超爽免费视频| 久久精品亚洲AV久久久无码| 亚洲黄片手机免费观看| 中文字幕免费视频| 一区二区三区AV高清免费波多| 亚洲精品美女久久久久|