ODBC API简介

1.      数据类型:

通过SQLGetTypeInfo函数来获取ODBC 3.0支持的数据类型信息。由SQLGetTypeInfo返回的数据类型是数据源所支持的数据类型。

SQLRETURN SQLGetTypeInfo(

     SQLHSTMT      StatementHandle,

     SQLSMALLINT   DataType);

其中DataType类型为SQL Data Types的一种,具体参见

https://msdn.microsoft.com/en-us/library/ms710150(v=vs.85).aspx

同时需要了解SQL数据类型与C数据类型的对应关系:

C type identifier

ODBC C typedef

C type

SQL_C_CHAR

SQLCHAR *

unsigned char *

SQL_C_SSHORT[j]

SQLSMALLINT

short int

SQL_C_USHORT[j]

SQLUSMALLINT

unsigned short int

SQL_C_SLONG[j]

SQLINTEGER

long int

SQL_C_ULONG[j]

SQLUINTEGER

unsigned long int

SQL_C_FLOAT

SQLREAL

float

SQL_C_DOUBLE

SQLDOUBLE, SQLFLOAT

double

SQL_C_BOOKMARK[i]

BOOKMARK

unsigned long int[d]

SQL_C_VARBOOKMARK

SQLCHAR *

unsigned char *

SQL_C_TYPE_DATE[c]

SQL_DATE_STRUCT

struct tagDATE_STRUCT {

   SQLSMALLINT year;

   SQLUSMALLINT month;

   SQLUSMALLINT day; 

} DATE_STRUCT;[a]

SQL_C_TYPE_TIME[c]

SQL_TIME_STRUCT

struct tagTIME_STRUCT {

   SQLUSMALLINT hour;

   SQLUSMALLINT minute;

   SQLUSMALLINT second;

} TIME_STRUCT;[a]

SQL_C_TYPE_TIMESTAMP[c]

SQL_TIMESTAMP_STRUCT

struct tagTIMESTAMP_STRUCT {

   SQLSMALLINT year;

   SQLUSMALLINT month;

   SQLUSMALLINT day;

   SQLUSMALLINT hour;

   SQLUSMALLINT minute;

   SQLUSMALLINT second;

   SQLUINTEGER fraction;[b]

} TIMESTAMP_STRUCT;[a]

 

2.      常用接口:

  • 连接到数据源

下面的函数用于连接到数据源:

(1)SQLAllocHandle:分配环境、连接、语句或者描述符句柄。

(2)SQLConnect:建立与驱动程序或者数据源的连接。访问数据源的连接句柄包含了包括状态、事务申明和错误信息的所有连接信息。

(3)SQLDriverConnect:与SQLConnect相似,用来连接到驱动程序或者数据源。但它比SQLConnect支持数据源更多的连接信息;

(4)SQLBrowseConnect:支持一种交互方法来检索或者列出连接数据源所需要的属性和属性值。

  • 获取驱动程序和数据源信息

下面的函数用来获取驱动程序和数据源信息:

(1)SQLDataSources:能够被调用多次来获取应用程序使用的所有数据源的名字。

(2)SQLDrivers:返回所有安装过的驱动程序清单,包括对它们的描述以及属性关键字。

(3)SQLGetInfo:返回连接的驱动程序和数据源的元信息。

(4)SQLGetFunctions:返回指定的驱动程序是否支持某个特定函数的信息。

(5)SQLGetTypeInfo:返回指定的数据源支持的数据类型的信息。

  • 设置或者获取驱动程序属性

下面的函数用来设置或者获取驱动程序属性:

(1)SQLSetConnectAttr:设置连接属性值。

(2)SQLGetConnectAttr:返回连接属性值。

(3)SQLSetEnvAttr:设置环境属性值。

(4)SQLGetEnvAttr:返回环境属性值。

(5)SQLSetStmtAttr:设置语句属性值。

(6)SQLGetStmtAttr:返回语句属性值。

  • 设置或者获取描述符字段

下面的函数用来设置或者获取描述符字段:

(1)SQLGetDescField:返回单个描述符字段的值。

(2)SQLGetDescRec:返回当前描述符记录的多个字段的值。

(3)SQLSetDescField:设置单个描述符字段的值。

(4)SQLSetDescRec:设置描述符记录的多个字段。

  • 准备SQL语句

下面的函数用来准备SQL语句:

(1)SQLPrepare:准备要执行的SQL语句。

(2)SQLBindParameter:在SQL语句中分配参数的缓冲区。

(3)SQLGetCursorName:返回与语句句柄相关的游标名称。

(4)SQLSetCursorName:设置与语句句柄相关的游标名称。

(5)SQLSetScrollOptions:设置控制游标行为的选项,在ODBC 3.0 中被SQLGetInfo和SQLSetStmtAttr接口替代

  • 提交SQL请求

下面的函数用来提交SQL请求:

(1)SQLExecute:与SQLPrepare共同使用,执行准备好的SQL语句。

(2)SQLExecDirect:执行一条SQL语句。

(3)SQLNativeSql:返回驱动程序对一条SQL语句的翻译,并不执行sql语句。

(4)SQLDescribeParam:返回对SQL语句中指定参数的描述。

(5)SQLNumParams:返回SQL语句中参数的个数。

(6)SQLParamData:与SQLPutData联合使用在运行时给参数赋值。

(7)SQLPutData:在SQL语句运行时给部分或者全部参数赋值。

  • 检索结果集及其相关信息

下面的函数用来检索结果集及其相关信息:

(1)SQLRowCount:返回INSERT、UPDATE或者DELETE等语句影响的行数。

(2)SQLNumResultCols:返回结果集中列的数目。

(3)SQLDescribeCol:返回结果集中列的描述符记录。

(4)SQLColAttribute:返回结果集中列的属性。

(5)SQLBindCol:为结果集中的列分配缓冲区。

(6)SQLFetch:在结果集中检索下一行元组。

(7)SQLFetchScroll:返回指定的结果行。

(8)SQLGetData:返回结果集中当前行某一列的值。

(9)SQLSetPos:在取到的数据集中设置游标的位置。这个记录集中的数据能够刷新、更新或者删除。

(10)SQLBulkOperations:执行块插入和块书签操作,其中包括根据书签更新、删除或者取数据。

(11)SQLMoreResults:确定是否能够获得更多的结果集,如果能就执行下一个结果集的初始化操作。

(12)SQLGetDiagField:返回一个字段值或者一个诊断数据记录。

(13)SQLGetDiagRec:返回多个字段值或者一个诊断数据记录。

  • 取得数据源系统表的信息

下面的函数用来取得数据源系统表的信息:

(1)SQLColumnPrivileges:返回一个关于指定表的列的列表以及相关的权限信息。

(2)SQLColumns:返回指定表的列信息的列表。

(3)SQLForeignKeys:返回指定表的外键信息的列表。

(4)SQLPrimaryKeys:返回指定表的主键信息的列表。

(5)SQLProcedureColumns:返回指定存储过程的参数信息的列表。

(6)SQLProcedures:返回指定数据源的存储过程信息的列表。

(7)SQLSpecialColumns:返回唯一确定某一行的列的信息,或者当某一事务修改一行的时候自动更新各列的信息。

(8)SQLStatistics:返回一个单表的相关统计信息和索引信息。

(9)SQLTablePrivileges:返回相关各表的名称以及相关的权限信息。

(10)SQLTables:返回指定数据源中表信息。

  • 终止语句执行

下面的函数用来终止语句执行:

(1)SQLFreeStmt:终止语句执行,关闭所有相关的游标,放弃没有提交的结果,选择释放与指定语句句柄相关的资源。

(2)SQLCloseCursor:关闭一个打开的游标,放弃没有提交的结果。

(3)SQLCancel:放弃执行一条SQL语句。

(4)SQLEndTran:提交或者回滚事务。

  • 中断连接

下面的函数处理中断连接的任务:

(1)    SQLDisconnect:关闭指定连接。

(2)    SQLFreeHandle:释放环境、连接、语句或者描述符句柄。

 

 

参考:

  https://msdn.microsoft.com/en-us/library/ms714562(v=vs.85).aspx

  http://www.cnblogs.com/huzhongzhong/archive/2011/07/12/2104209.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。