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_bindODBC_CODBC_SQL
character
char
SQLCHARACTERSQL_C_CHARSQL_CHAR
varchar
character varying
char varying
sysname
SQLCHARACTERSQL_C_CHARSQL_VARCHAR
textSQLCHARACTERSQL_C_CHARSQL_LONGVARCHAR
ncharSQLNCHARSQL_C_WCHARSQL_WCHAR
nvarcharSQLNVARCHARSQL_C_WCHARSQL_WVARCHAR
ntextSQLNTEXTSQL_C_WCHARSQL_WLONGVARCHAR
decimal
dec
money
smallmoney
SQLCHARACTERSQL_C_CHARSQL_DECIMAL
numericSQLNUMERICNSQL_C_NUMERICSQL_NUMERIC
bitSQLBITSQL_C_BITSQL_BIT
smallintSQLINT2SQL_C_SSHORTSQL_TINYINT(有符号)
tinyintSQLINT1SQL_C_UTINYINTSQL_TINYINT(无符号)
smallintSQLINT2SQL_C_SSHORTSQL_SMALL_INT(有符号)
int
integer
SQLINT4SQL_C_SLONGSQL_SMALL_INT(无符号)
int
integer
SQLINT4SQL_C_SLONGSQL_SMALL_INT(有符号)
decimal
dec
SQLCHARACTERSQL_C_CHARSQL_INTEGER(无符号)
bigintSQLCHARACTERSQL_C_CHARSQL_BIGINT(有符号和无符号)
realSQLFLT4SQL_C_FLOATSQL_REAL
floatSQLFLT8SQL_C_DOUBLESQL_FLOAT
floatSQLFLT8SQL_C_DOUBLESQL_DOUBLE
binary
timestamp
SQLBINARYSQL_C_BINARYSQL_BINARY
varbinary
binary varying
SQLBINARYSQL_C_BINARYSQL_VARBINARY
imageSQLBINARYSQL_C_BINARYSQL_LONGBARBINARY
datetime
smalldatetime
SQLCHARACTERSQL_C_CHARSQL_TYPE_DATE
datetime
smalldatetime
SQLCHARACTERSQL_C_CHARSQL_TYPE_TIME
datetime
smalldatetime
SQLCHARACTERSQL_C_CHARSQL_TYPE_TIMESTAMP
uniqueidentifierSQLUNIQUEIDSQL_C_GUIDSQL_GUID
charSQLCHARACTERSQL_C_CHARSQL_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/archive/2012/05/30/2526423.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值