• 通过ODBC API实现对数据库的访问 Mr


    使用ODBC所需要的文件
    1、sql.h : 包含基本的ODBC API的定义。
    2、sqlext.h :包含扩展的ODBC的定义。
    3、odbc32.lib :库文件。
    例如:
    #include <sqlext.h>
    #include <sql.h>
    #include <odbcinst.h>
    #pragma comment(lib, "odbccp32.lib")
    #pragma comment(lib, "odbc32.lib")

    一、配置ODBC数据源
    配置ODBC数据源可以通过手动配置 和 程序自动配置 两种方式来实现。
    第一种:手动配置(不作说明)
    第二种:程序自动配置

    SQLRETURN retcode;
    retcode = SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb, *.accdb\0","DSN=Victor\0DBQ=D:\\MyDataBase\\Victor.accdb\0DEFAULTDIR=D:\\MyDataBase\0");
    if(!retcode)
    {
      AfxMessageBox("配置ODBC数据源失败!");
      return;
    }

    ODBC API提供了动态创建数据源的函数SQLConfig DataSource。该函数的原型如下:  
      BOOL SQLConfigDataSource(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
    参数说明如下:  
    1、参数hwndParent用于指定父窗口句柄,在不需要创建数据源对话框时,可以将该参数指定为NULL。 
    2、参数fRequest用于指定函数的操作内容,取值如下:  
      ODBC_ADD_DSN: 加入一个新的用户数据源;  
      ODBC_CONFIG_DSN:修改一个存在的用户数据源;  
      ODBC_REMOVE_DSN:除一个存在的用户数据源;  
      ODBC_ADD_SYS_DSN:增加一个新的系统数据源;  
      ODBC_CONFIG_SYS_DSN:配置或者修改一个存在的系统数据源;  
      ODBC_REMOVE_SYS_DSN:删除一个存在的系统数据源;  
      ODBC_REMOVE_DEFAULT_DSN:删除省缺的数据源说明部分。
    3、参数lpszDriver用于指定ODBC数据源的驱动  
    例如,为了指定Access数据源,该参数应赋以字符串"Microsoft Access Driver (*.mdb, *.accdb)\0";对SQL SERVER数据源,则应赋以字符串"SQL Server"。  
    4、参数lpszAttributes用于指定ODBC数据源属性。例如:
     4.1 对Access数据源:  
      "DSN=Victor\0DBQ=D:\\MyDataBase\\Victor.accdb\0DEFAULTDIR=D:\\MyDataBase\0"  
      说明:该字符串指定数据源名称(DNS)为Victor;数据库文件(DBQ)为D:\\MyDataBase\\Victor.accdb;缺省数据库文件路径(DEFAULTDIR)为D:\\MyDataBase。  
    4.2 对SQL SERVER数据源: 
      "DSN=Victor\0SERVER=MYET\0 DATABASE=Image"  
      说明:该字符串指定数据源名称(DSN)为MYIMAGE;SQLSERVER 数据库服务器名(SERVER)为MYET;数据库名称(DATABASE)为Image。

    二、分配ODBC环境并设置ODBC环境属性
    对于任何ODBC应用程序来说,第一步的工作是装载驱动程序管理器,然后初始化ODBC环境,分配环境句柄。ODBC驱动程序管理器使用该环境句柄跟踪每一个ODBC连接及其状态。
    //分配环境句柄
    SQLHENV henv;
    retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    if(!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
    {
      AfxMessageBox("分配环境句柄失败!");
      return;
    }
    执行该调用语句后,驱动程序分配一个结构,该结构中存放环境信息,然后返回对应于该环境的环境句柄。

    然后ODBC应用程序必须调用SQLSetEnvAttr函数,这个函数注册将要使用的ODBC API版本。
    //设置ODBC环境属性
    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,0);
    if(!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
    {
       SQLFreeHandle(SQL_HANDLE_ENV, henv);
       AfxMessageBox("设置ODBC环境属性失败!");
       return;
    }

    三、分配连接句柄
    分配环境句柄后,在建立至数据源的连接之前,必须分配一个连接句柄,每一个到数据源的连接对应于一个连接句柄。
    //分配连接句柄
    SQLHDBC hdbc;
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    if(!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
    {
       SQLFreeHandle(SQL_HANDLE_ENV, henv);
       AfxMessageBox("分配连接句柄失败!");
       return;
    }

    四、连接数据源
    当连接句柄分配完成后,可以设置连接属性,所有的连接属性都有缺省值,但是可以通过调用函数SQLSetConnectAttr()来设置连接属性。用函数SQLGetConnectAttr(0获取这些连接属性。
    //设置最长登录时间为5s
    SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);

    完成对属性的设置之后,就可以建立到数据源的连接了。对于不同的程序和用户接口,可以用不同的函数建立连接:SQLConnect、SQLDriverConnect、SQLBrowseConnect.
    SQLConnect()提供了最为直接的程序控制方式,只要提供数据源名称、用户ID和口令就可以进行连接了。
    //连接到数据源
    retcode = SQLConnect(hdbc, (SQLCHAR*)"Victor", SQL_NTS, NULL , 0, NULL, 0);
    if(!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
    {
       SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
       SQLFreeHandle(SQL_HANDLE_ENV, henv);
       AfxMessageBox("连接数据源失败!");
       return;
    }

    五、分配语句句柄
    最后一段ODBC初始化代码是调用SQLAllocHandle函数创建一个语句句柄。该语句句柄用于处理SQL请求。
    //分配语句句柄
    SQLHSTMT hstmt;
    retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
    if(!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))
    {
       SQLDisconnect(hdbc);
       SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
       SQLFreeHandle(SQL_HANDLE_ENV, henv);
       AfxMessageBox("分配语句句柄失败!");
       return;
    }

  • 相关阅读:
    XAML语言
    Sqlite 数据库插入标示字段 获取新Id 及利用索引优化查询
    提高C#编程水平的50个要点 ——学生的迷茫
    734条高频词组笔记
    C#读取ini配置文件
    MD5加密
    SQL Server 2000 及 2005 端口修改
    Java控制台程序20例
    Tomcat 6.0+ SQL Server 2005连接池的配
    阿里巴巴离职DBA 35岁总结的职业生涯
  • 原文地址:https://www.cnblogs.com/miaohw/p/2147379.html
Copyright © 2020-2023  润新知