zoukankan      html  css  js  c++  java
  • ODBC总结

    引用头文件:sql.hsqlext.hsqltypes.h

    添加库文件:odbc32.lib   odbccp32.lib

    1.定义环境变量:

    SQLHENV  henv =nullptr;//环境句柄
    SQLHDBC hdbc = nullptr;  //链接句柄
    SQLHSTMT hstmt = nullptr;//语句句柄
       SQLRETURN result;   //返回值
       SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=rupeng;CharSet=gbk;";
    SQLCHAR ConnStrOut[MAXBUFLEN];

    Driver Manager 进行控制,配置环境属性,保存配置好的数据源名称,ODBC版本号,用户IP,用户ID,密码等

    2.初始化环境:

    //分配环境句柄
        result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    //设置管理环境属性
        result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

    应用程序调用SQLAllocHandle分配链接句柄,通过SQLConnectSQLBrowseConnect与数据链接

    SQLConnect/SQLBrowseConnect链接函数,输入参数为:

      配置好的数据源名称

      ODBC版本号

      用户IP

      用户ID

      密码等

    3.链接:

    //分配连接句柄
        result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    //设置连接属性
        result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, 0);
    //连接数据库
        result = SQLDriverConnect(hdbc,NULL,
                                  ConnStrIn,SQL_NTS,
                                  ConnStrOut,MAXBUFLEN,
                               (SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);
        if(SQL_ERROR==result)
        {
           ShowDBConnError(hwnd,hdbc);
           return;
        }

    处理任何SQL语句之前,应用程序还需要首先分配一个语句句柄

    语句句柄含有具体的SQL语句以及输出的结果等信息

    应用程序还可以通过SQLtStmtAttr来设置语句属性(也可以使用默认值)

    4.数据,执行SQL语句:

    result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
    result = SQLPrepare(hstmt,(SQLCHAR*)"select FName,FNumber from rupeng1",SQL_NTS);
    CHECKDBSTMTERROR(hwnd,result,hstmt);
        result =SQLExecute(hstmt);
        CHECKDBSTMTERROR(hwnd,result,hstmt);
    
      SQLINTEGER cbsatid=SQL_NTS;

    应用程序处理SQL语句的两种方式:

    预处理(SQLPrepareSQLExecute适用于语句的多次执行)

    直接执行(SQLExecdirect

    如果SQL语句含有参数,应用程序为每个参数调用SQLBindParameter,并把他们绑定至应用程序变量

    应用程序可以直接通过改变应用程序缓冲区的内容从而在程序中动态的改变SQL语句的执行

    应用程序根据语句的类型进行的处理

    有结果集的语句(select或是编目函数),则进行结果集处理。

    没有结果集的函数,可以直接利用本语句句柄继续执行新的语句或是获取行计数(本次执行所影响的行数)之后继续执行。

    在插入数据时,采用了预编译的方式,首先通过SQLPrepare来预处理SQL语句,将每一列绑定到用户缓冲区。

    应用程序可以直接修改结果集缓冲区的内容

    5.处理:

    while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND)   //逐行读取
      { 
       SQLINTEGER i;
       SQLGetData(hstmt,2,SQL_C_LONG,&i,sizeof(i),&cbsatid); 
       TCHAR s[20];
       wsprintf(s,TEXT("年龄是:%d"),i);
        
      
       TCHAR name[20]; 
       SQLGetData(hstmt,1,SQL_C_CHAR,name,sizeof(name)/sizeof(SQLCHAR),&cbsatid); 
       MessageBox(hwnd,name,TEXT(""),MB_OK);

    6.处理:

    SQLFreeStmt(hstmt,SQL_CLOSE);
        SQLDisconnect(hdbc);
        SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
        SQLFreeHandle(SQL_HANDLE_ENV,henv);
    MessageBox(hwnd,TEXT("执行成功"),TEXT("标题"),MB_OK);
    }
  • 相关阅读:
    第13章 TCP/IP和网络编程
    实验二测试
    实验四 Web服务器1socket编程
    thread同步测试
    团队作业(五):冲刺总结——第四天
    111
    递归和数学归纳法
    Nodejs中cluster模块的多进程共享数据问题
    JavaScript写类方式(一)——工厂方式
    JavaScript中的shift()和pop()函数
  • 原文地址:https://www.cnblogs.com/ye-ming/p/8031160.html
Copyright © 2011-2022 走看看