小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用VC++實現(xiàn)ODBC數(shù)據源設置 - VC教程 - CND8學院

 烏拉拉1226 2011-01-19

用VC++實現(xiàn)ODBC數(shù)據源設置

CND8學院 VC教程 發(fā)布日期:2008年12月11日
將本文收藏到: | 收藏到本地 | 復制本文地址


為了使ODBC能與數(shù)據庫一起工作,必須把數(shù)據庫注冊到ODBC驅動程序管理器,這項工作可以通過定義一個DSN或數(shù)據源名字來完成。通常,我們只能手動打開系統(tǒng)控制面板,運行其中的ODBC數(shù)據源管理器,手工配置數(shù)據源,但是這項工作對用戶而言過于復雜,我們必須考慮用程序替用戶完成這些配置工作。

  1. SQLConfigDataSource 函數(shù)說明

  ODBC API提供了動態(tài)創(chuàng)建數(shù)據源的函數(shù)SQLConfig DataSource。該函數(shù)的原型如下:

BOOL SQLConfigDataSource ( HWND hwndParent,WORD fRequest,
LPCSTR lpszDriver,LPCSTR lpszAttributes );
  參數(shù)說明如下:

  (1)參數(shù)hwndParent用于指定父窗口句柄,在不需要創(chuàng)建數(shù)據源對話框時,可以將該參數(shù)指定為NULL。

 ?。?)參數(shù)fRequest用于指定函數(shù)的操作內容,取值如下:

  ODBC_ADD_DSN: 加入一個新的用戶數(shù)據源;

  ODBC_CONFIG_DSN:修改一個存在的用戶數(shù)據源;

  ODBC_REMOVE_DSN:除一個存在的用戶數(shù)據源;
 
  ODBC_ADD_SYS_DSN:增加一個新的系統(tǒng)數(shù)據源;

  ODBC_CONFIG_SYS_DSN:配置或者修改一個存在的系統(tǒng)數(shù)據源;

  ODBC_REMOVE_SYS_DSN:刪除一個存在的系統(tǒng)數(shù)據源;

  ODBC_REMOVE_DEFAULT_DSN:刪除省缺的數(shù)據源說明部分。

  (3)參數(shù)lpszDriver用于指定ODBC數(shù)據源的驅動

  程序類別,例如,為了指定Access數(shù)據源,該參數(shù)應賦以字符串“Microsoft Access Driver (*.mdb)”;對SQL SERVER數(shù)據源,則應賦以字符串“SQL Server”。

  (4)參數(shù)lpszAttributes用于指定ODBC數(shù)據源屬性。例如:

 ?、?對Access數(shù)據源:

"DSN= MYIMAGE DBQ=D:ImageProcessimage.mdb
DEFAULTDIR= D:ImageProcess"

  說明:該字符串指定數(shù)據源名稱(DNS)為MYIMAGE;數(shù)據庫文件(DBQ)為D:ImageProcessimage.mdb ;缺省數(shù)據庫文件路徑(DEFAULTDIR) 為D:ImageProcess 。

 ?、?對SQL SERVER數(shù)據源:

"DSN=MYIMAGE SERVER=MYET DATABASE=Image"

  說明:該字符串指定數(shù)據源名稱(DSN)為MYIMAGE;SQLSERVER 數(shù)據庫服務器名(SERVER)為 MYET;數(shù)據庫名稱(DATABASE)為Image。


  2 .兩個需要注意的問題

 ?。?)當我們使用SQLConfigDataSource ODBC API函數(shù)時必須聲明包含系統(tǒng)的odbcinst.h頭文件,所以我們再選擇workspace窗口中FileView打開Header Files中Imageprocess.h,在其中加入#include“odbcinst.h”。

 ?。?)SQLConfigDataSource 這個API函數(shù)時候必須用到odbccp32.dll,它是Microsoft 提供的32 位ODBC安裝和管理的DLL,如果是16 位必須用到odbcinst.dll,odbccp32.dll 有一個import library,所以解決的辦法就是把這個odbccp32.lib加到我們的項目中,我們可以打開
Project系統(tǒng)菜單項,選Add to Project子菜單,在其中選Files項,打開VC安裝目錄下的vclib目錄,文件類型選Library Files(.lib) , 選擇其中odbccp32.lib后按OK鍵。

  3 .程序代碼

  從上文看出設置參數(shù)lpszAttributes時需要設置數(shù)據庫文件的路徑,為了方便用戶的使用,可以將數(shù)據庫文件保存到該項目的debug文件夾下,通過程序實現(xiàn)自動獲取數(shù)據庫文件路徑的功能,代碼如下:

    CString szPath;
    GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    szPath.ReleaseBuffer ();
    int nPos;
    nPos=szPath.ReverseFind (’’);
    szPath=szPath.Left (nPos);
    CString szFile = sPath + "image.mdb";
    char szAtr[256];
    sprintf(szAtr,"DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ","MYIMAGE", szFile,szPath);
    int nlen;
    nlen = strlen(szAtr);
    for (int i=0; i<nlen; i++)
    {
         if (szAtr [i] == ’!’)
         szAtr [i] = ’’;
    }
   if (FALSE == SQLConfigDataSource(NULL, ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)", (LPCSTR)szAtr))
          AfxMessageBox("SQLConfigDataSource Failed");

  編譯并運行程序后,可以通過控制面板的ODBC數(shù)據源管理器或注冊表查看運行結果,就會看到數(shù)據庫已經成功的注冊了。

下面再介紹一個通用函數(shù)
/*
頭文件:#include <odbcinst.h> //SQLConfigDataSource
函數(shù):CrreateDSN
功能:動態(tài)創(chuàng)建數(shù)據源
輸入參數(shù):CString str 名稱
CString strDatabase 數(shù)據庫的路徑
CString strDescription 說明
CString strServer 服務器名稱
CString strUID 用戶名
int iCount 標識數(shù)據庫類型, 1表示Access數(shù)據庫; 2表示SQL Server; 3表示Oracle數(shù)據庫
返回值: int型
1: 表示創(chuàng)建Access數(shù)據源成功
-1: 表示創(chuàng)建Access數(shù)據源失敗
2: 表示創(chuàng)建SQL Server數(shù)據源成功
-2: 表示創(chuàng)建SQL Server數(shù)據源失敗
3: 表示創(chuàng)建Oracle數(shù)據源成功
-3: 表示創(chuàng)建Oracle數(shù)據源失敗
-4: 表示不支持創(chuàng)建其他類型的數(shù)據源
*/


AFX_EXT_CLASS int CrreateDSN(CString str, CString strDatabase, CString strDescription, CString strServer, CString strUID, int iCount)
{
char* Attributes;
int mlen, i;
Attributes=new char[256];
switch(iCount)
{
case 1:
   sprintf(Attributes,"DSN=%s! DESCRIPTION=%s! DBQ=%s! FIL=MicrosoftAccess! DEFAULTDIR=D:\Database!!",
    str, strDescription, strDatabase);
   mlen = strlen(Attributes);
   for (i=0; i<mlen; i++)
   {
    if (Attributes[i] == '!')
    Attributes[i] = '';
   }
   if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)",(LPCSTR)Attributes))
    return 1;
   else
    return -1;
   break;
case 2:
   sprintf(Attributes,"DSN=%s!Description=%s!server=%s!Database=%s!",
    str, strDescription, strServer, strDatabase);
   mlen = strlen(Attributes);
   for (i=0; i<mlen; i++)
   {
    if (Attributes[i] == '!')
     Attributes[i] = '';
   }
   if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"SQL Server",(LPCSTR)Attributes))
    return 2;
   else
    return -2;
   break;
case 3:
   sprintf(Attributes,"DSN=%s!Description=%s!ServerName=%s!UserID=%s!",
    str, strDescription, strServer, strUID);
   mlen = strlen(Attributes);
   for (i=0; i<mlen; i++)
   {
    if (Attributes[i] == '!')
     Attributes[i] = '';
   }
   if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Oracle in OraHome92",(LPCSTR)Attributes))
    return 3;
   else
    return -3;
   break;
default:
   return -4;
   break;
}
}

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多