概要:
这里主要介绍的是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
charSQLCHARACTER SQL_C_CHAR SQL_CHAR varchar
character varying
char varying
sysnameSQLCHARACTER 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
smallmoneySQLCHARACTER 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
integerSQLINT4 SQL_C_SLONG SQL_SMALL_INT(无符号) int
integerSQLINT4 SQL_C_SLONG SQL_SMALL_INT(有符号) decimal
decSQLCHARACTER 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
timestampSQLBINARY SQL_C_BINARY SQL_BINARY varbinary
binary varyingSQLBINARY SQL_C_BINARY SQL_VARBINARY image SQLBINARY SQL_C_BINARY SQL_LONGBARBINARY datetime
smalldatetimeSQLCHARACTER SQL_C_CHAR SQL_TYPE_DATE datetime
smalldatetimeSQLCHARACTER SQL_C_CHAR SQL_TYPE_TIME datetime
smalldatetimeSQLCHARACTER 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是绕不过去了。