zoukankan      html  css  js  c++  java
  • SQL Server连接方法之ODBC

    概要:

        这里主要介绍的是ODBC,而MFC ODBC会在学习MFC的时候在学习。

    要点:

        主要有数据类型和API接口学习。

        ODBC的体系结构是建立在客户/服务器体系结构之上的,包含四个部分:应用程序、ODBC驱动程序管理器、ODBC驱动程序、数据源。

        相关头文件有:

             <sql.h>(包含有基本的ODBC API的定义)

             <sqlext.h>(包含有扩展的ODBC的定义)

             <odbc32.lib>(库文件)

    --数据类型:

        ODBC使用数据类型:SQL类型、ODBC数据类型和C类型。其中ODBC数据类型起到由SQL到程序之间类型转换的桥梁的作用

    SQL类型 bcp_bind ODBC_C ODBC_SQL
    character
    char
    SQLCHARACTER SQL_C_CHAR SQL_CHAR
    varchar
    character varying
    char varying
    sysname
    SQLCHARACTER SQL_C_CHAR SQL_VARCHAR
    text SQLCHARACTER SQL_C_CHAR SQL_LONGVARCHAR
    nchar SQLNCHAR SQL_C_WCHAR SQL_WCHAR
    nvarchar SQLNVARCHAR SQL_C_WCHAR SQL_WVARCHAR
    ntext SQLNTEXT SQL_C_WCHAR SQL_WLONGVARCHAR
    decimal
    dec
    money
    smallmoney
    SQLCHARACTER SQL_C_CHAR SQL_DECIMAL
    numeric SQLNUMERICN SQL_C_NUMERIC SQL_NUMERIC
    bit SQLBIT SQL_C_BIT SQL_BIT
    smallint SQLINT2 SQL_C_SSHORT SQL_TINYINT(有符号)
    tinyint SQLINT1 SQL_C_UTINYINT SQL_TINYINT(无符号)
    smallint SQLINT2 SQL_C_SSHORT SQL_SMALL_INT(有符号)
    int
    integer
    SQLINT4 SQL_C_SLONG SQL_SMALL_INT(无符号)
    int
    integer
    SQLINT4 SQL_C_SLONG SQL_SMALL_INT(有符号)
    decimal
    dec
    SQLCHARACTER SQL_C_CHAR SQL_INTEGER(无符号)
    bigint SQLCHARACTER SQL_C_CHAR SQL_BIGINT(有符号和无符号)
    real SQLFLT4 SQL_C_FLOAT SQL_REAL
    float SQLFLT8 SQL_C_DOUBLE SQL_FLOAT
    float SQLFLT8 SQL_C_DOUBLE SQL_DOUBLE
    binary
    timestamp
    SQLBINARY SQL_C_BINARY SQL_BINARY
    varbinary
    binary varying
    SQLBINARY SQL_C_BINARY SQL_VARBINARY
    image SQLBINARY SQL_C_BINARY SQL_LONGBARBINARY
    datetime
    smalldatetime
    SQLCHARACTER SQL_C_CHAR SQL_TYPE_DATE
    datetime
    smalldatetime
    SQLCHARACTER SQL_C_CHAR SQL_TYPE_TIME
    datetime
    smalldatetime
    SQLCHARACTER SQL_C_CHAR SQL_TYPE_TIMESTAMP
    uniqueidentifier SQLUNIQUEID SQL_C_GUID SQL_GUID
    char SQLCHARACTER SQL_C_CHAR SQL_INTERVAL_

    PS:以上图标是从网络上摘抄过来的。

    --句柄:

        ODBC句柄分为:

    环境句柄--程序中唯一,需要创建和释放句柄;

    连接句柄--保存与数据库的连接信息;

    语句句柄—ODBC内部的句柄,处理SQL语句及目录函数;

    描述器句柄--记录元数据集合的句柄,是SQL执行的结果集;

        对应的类型为:SQLHENV,SQLHDBC,SQLHSTMT;

        句柄分配函数是SQLAllocHandle()函数;

    --API接口:

        所有API的返回值类型都是SQLRETURN,其中API成功的标志是SQL_SUCCESS和SQL_SUCCESS_WITH_INFO;

        调用API的过程也是ODBC的执行流程:

          a).分配环境句柄和连接句柄;

          b).连接数据源;

          c).构造和执行SQL语句;

          d).获取执行结果;

          e).断开数据源,释放环境;

    1.SQLRETURN SQLAllocHandle(SQLSMALLINT HandleType,

         SQLHANDLE InputHandle,SQLHANDLE*OutputHandlePtr);

      作用:创建句柄--根据第一个参数可穿件不同的句柄

      参数:第一参数HandleType分为SQL_HANDLE_ENV(环境句柄),

                   SQL_HANDLE_DBC(连接句柄),SQL_HANDLE_STMT(语句句柄)

              第二参数是输入参数,第三参数是输出参数即要申请的句柄;

    2.属性设置函数:

       SQLRETURN SQLSetEnvAttr() --设置环境句柄

       SQLRETURN SQLSetConnectAttr() --设置连接句柄

    3.连接数据源:

       SQLDriveConnect(),SQLBrowseConnect() –略

       SQLRETURN SQLConnect(SQLHDBC,

              SQLCHAR * svrname,SQLSMALLINT legth1,

              SQLCHAR * username,SQLSMALLINT length2,

              SQLCHAR * authentication,SQLSMALLINT length3)

        参数:第一个参数是连接连接句柄,后几个参数是配置信息,

                其中length表示前一个参数的大小—SQL_NTS表示以'\0'结尾;

    4.执行SQL语句:

      SQLRETURN SQLExecDirect(SQLHSTMT,SQLCHAR*,SQLINTEGER);

      参数:第一个是语句句柄,第二个是SQL语句,第三个是SQL语句长度

      说明:直接执行SQL语句

    5.构造并执行SQL语句:

      SQLRETURN SQLPrepare(SQLHSTMT,SQLCHAR*,SQLINTEGER);

      作用:准备SQL语句,对于多次执行的SQL语句可缓存执行;

      SQLRETURN SQLBindParameter(SQLHSTMT,SQLUSMALLINT num,

           SQLSMALLINT InputOutputType,SQLSMALLINT valueType,

           SQLSMALLINT ParameterType,SQLUMALLINT ColumnSize,

           SQLSMALLINT DecimalDigits,SQLPOINTER ParameterValuePtr,

           SQLINTEGER BufferLength,SQLINTEGER * StrLen_or_IndPtr);

      作用:绑定变量:

      参数:第一个参数是语句句柄,第二个参数是绑定的参数在SQL中的序号,

              第三个参数是参数类型,第四个参数是值类型,

              第五个参数是参数数据类型,第六个参数是参数大小,

              第七个参数是参数精度,第八个参数是存放参数值的缓冲区的指针,

              第九个参数是参数值缓冲区大小,第十个参数是存放参数的缓冲区指针;

    6.绑定结果列:

      SQLRETURN SQLBindCol(SQLHSTMT,SQLUSMALLINT number,

             SQLSMALLINT type,SQLPOINTER valuePtr,SQLINTEGER len,

             SQLINTEGER * StrLen_or_IndPtr)

      作用:先绑定到结果列中就可以直接去的结果值

      参数:第一个参数是语句句柄,第二个参数是列号,第三个参数是数据类型,

              第四个参数是存放数据的位置,第五个参数是存放结果位置的大小,

               第六个参数是指向绑定数据列使用的长度的指针

    7.获取结果--移动光标:

      SQLRETURN SQLFetch(SQLHSTMT)

      作用:在绑定好结果列后就可以获取结果集了,判断是否读取到结尾的方法有

              判断反悔结果是否是正确值,或是否等于SQL_NO_DATA了

    8.断开数据源和释放ODBC环境:

      断开连接是SQLDisconnect函数

      释放环境变量是SQLFreeHandle函数

    9.其他函数:

      SQLRETURN SQLGetData(SQLHSTMT,SQLUSMALLINT num,

            SQLSMALLINT type,SQLPOINTER valuePtr,SQLINTEGER len,

            SQLINTEGER * StrLen_or_IndPtr)

      作用:获取光标处某列的值

      SQLRETURN SQLNumResultCols(SQLHSTMT,SQLSMALLINT countPtr)

      作用:得到结果集中的列数

      SQLRETURN SQLRowCount(SQLHSTMT,SQLINTEGER * countPtr)

      作用:执行SQL后影响的行数

    PS:

    ODBC中变量和函数都以SQL开头;

    ODBC支持事务处理;

    ODBC 3.X中规定了ODBC的驱动程序是线程安全的;

    ODBC 3.X不推荐使用异步执行--虽然仍支持;

    小结:

        MFC也有一个ODBC的接口而且更简单,看来要在windows平台混的话MFC是绕不过去了。

  • 相关阅读:
    0 Explore TreeView
    按钮颜色选择器
    颜色组合框
    Get Files from Directory
    05.0 图片
    WINAPI 变量(2861个)
    为字符串增加50个空格
    让DataGridView显示行号
    相对路径
    SpecialFolder
  • 原文地址:https://www.cnblogs.com/davidyang2415/p/2526423.html
Copyright © 2011-2022 走看看