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是绕不过去了。

原文地址:https://www.cnblogs.com/davidyang2415/p/2526423.html