3.DB链接
3.1SQLAllocEnv
调用:
Rc =SQLAllocEnv(&hEnv);
说明:
在调用其他ODBC函数之前,应用程序必须调用SQLAllocEnv来为ODBC环境句柄分配内存并初始化ODBC调用级的接口,程序中传递到SQLAllocEnv的参数是内存地址,该处是函数保存程序的ODBC环境的实际物理地址(句柄)。
如果SQLAllocEnv在分配和初始化ODBC环境所使用的内存是成功的,指针hEnv将包括应用程序的函数所使用的ODBC环境的内存地址(或句柄),传递给SQLAllocConnect和SQLFreeConnect分配和释放连接句柄和内存资源!
3.2SQLAllocConnect
调用:
rc = SQLAllocConnect(hEnv, &hDbc);
说明:
·hEnv是环境句柄,也就是指向程序可找到由SQLAllocEnv函数分配给ODBC环境所使用的内存位置的指针
·hDbc是数据库连接句柄,也就是指向程序可找到特定的与DBMS连接的设置和信息的内存位置的指针。SQLAllocConnect函数把实际的连接区域(连接句柄)放在hDbc变量中。
rc = SQLFreeConnect(hDbc);
正如应用程序调用SQLFreeEnv函数来释放由SQLAllocEnv分配的不再需要的内存一样程序也应该调用SQLFreeConnect函数来释放由SQLAllocConnect所分配的不再需要的内存。
.3SQLSetConnectOption
调用:
rc = SQLSetConnectOption(hDbc,wOption,dwOpval)
使用SQLSetConnectOption来设置连接选项,函数选项和选项值如下表所示:
wOption | dwOpVal |
SQL_ACCESS_MODE | SQL_MODE_READ_ONLY, SQL_MODE_READ_WRITE |
SQL_AUTOCOMMIT | SQL_AUTO_COMMIT_OFF,SQL_AUTO_COMMIT_ON |
SQL_CURRENT_QUALIFIER | 一个包括数据源限定符得null结尾的字符串,在MS_SQL Server上,数据源限定符是数据库名称。因此,驱动程序将向DBMS发送USE<database>,其中<database>是在dwOpVal中提供字符串 |
SQL_LOGIN_TIMEOUT | 等待DBMS完全登陆请求的秒数,值为0时禁用时限,驱动程序将无限的等待下去,直到DBMS完成登陆请求 |
SQL_ODBC_CURSORS | SQL_CUR_USE_IF_NEEDED,SQL_CUR_USE_ODBC,SQL_CUR_USE_DRIVER |
SQL_OPT_TRACE | SQL_OPT_TRACE_OFF,SQL_OPT_TRACE_ON |
SQL_OPT_TRACEFILE | 以NULL结尾的字符串形式表示的跟踪文件名 |
SQL_PACKET_SIZE | 网络封包容量,以字节计 |
SQL_QUIET_MODE | ODBC驱动程序显示对话框的窗口句柄,如果设置为等于null指针,则ODBC驱动程序将不显示任何对话框 |
SQL_TRANSLATE_DLL | 一个null结尾的字符串,其中有包括函数SQLDricerTODataSource和SQLDataSourceToDricer的ODBC驱动程序要装入并用来执行诸如字符串集翻译的DLL文件名 |
SQL_TRANSLATE_OPTION | ODBC驱动程序传递给翻译DLL的32位的整数值 |
SQL_TXN_ISOLATION | SQL_TXN_READ_UNCOMMITTED,SQL_TXN_READ_COMMITTED,SQL_TXN_REPEATABLE_READ,SQL_TXN_S. |
其中:
·hDbc是由SQLAllocConnect返回的ODBC环境空间(内存)的连接区域的连接句柄(指向内存起始位置的指针)
·wOption是表的连接选项之一
·dwOpVal是为wOption设置的值。根据调用SQLSetConnectOption函数要设置的选项dwOpVal即可是32位的整数也可是NULL结尾的字符串。
程序必须为每个想要设置的会话连接选项调用SQLSetConnectOption函数要设置的选项
rc =SQLSetConnectOption(hDbc,wOption,dwOpval)
ODBC驱动程序为所有活动的语句和所有的接下来使用ODBC函数调用发送到DBMS处理的语句设置选项
.4SQLDriverConnect
rc = SQLDriverConnect(hDbc, NULL, ConnString, SQL_NTS, ConnOut, 512,
&connOutLen, SQL_DRIVER_NOPROMPT);
SQLConnect | 这是最简单的函数。它只需要数据源名(DSN,Data source name)和可选的用户名和密码.它不提供任何GUI选项例如向用户显示一个对话框来提供更多信息。如果你已经有了需要使用的数据库的DSN就可以使用这个函数. |
SQLDriverConnect | 这 个函数提供了较SQLConnect更多的选择.我们可以连接一个没有在系统信息内定义的数据源。如没有DSN.另外,我们可以指定这个函数是否需要显示 一个对话框来为用户提供更多信息.例如,如果用户遗漏了数据库的名字,它会指导ODBC驱动程序显示一个对话框,让用户来选择想连接的数据库. |
SQLBrowseConnect | 这个函数允许在运行时(RunTime)枚举数据源.比SQLDriverConnect更加灵活。因为可以多次顺序调用SQLBrowseConnect,而每次提供给使用者更多的专用信息直到最后获得需要的连接句柄. |
我将先检查SQLConnect函数.要使用 SQLConnect,你应先知道什么是DSN. DSN是数据源名(Data SourceName)的缩写,是一个唯一标识某数据源的字符串。一个DSN标识了一个包含了如何连接某一特定的数据源的信息的数据结构.这个信息包括要使用何种 ODBC驱动程序及要连接哪个数据库.我们可以通过控制面板中的32位ODBC数据源来创建、修改及删除DSN.
SQLConnect的语法如下:
hDbc: DWORD
szDSN: DWORD,
cbDSN: DWORD,
szUID: DWORD,
cdUID: DWORD,
szAuthStr: DWORD,
cbAuthStr: DWORD
·hDbc:是由SQLAllocConnect函数返回的连接句柄。
·szDSN:是以null结尾的字符串,其中有与DBMS连接时ODBC驱动程序适用的数据源名称。
·cbDSN: 是szDSN参数中DSN的长度。
·szUID: 是于null结尾的字符串,其中有登录到DBMS时使用的用户名。
·cdUID: 用户名的长度
·szAuthStr: 指向该用户名所使用密码的指针
·cbAuthStr: 密码的长度
在最小情况下, SQLConnect 需要连接句柄,DSN和DSN的长度。如果数据源不需要的话,用户名和密码就不是必须的.函数的返回值与SQLAllocHandle的返回值相同.假设我们的系统中有一个叫做"Sales"的DSN并且我们想连接这个数据源.我们可以这么做:
rc =SQLConnect(hDbc,data_source_name, SQL_NTS,user_ID, SQL_NTS, password,SQL_NTS);
注意:在SQL.H中,SQL_NTS的值定义为-3,如果将任何一个字符串的长度参数(cbDSN,cbUID,cbAuthStr)设置为SQL_NTS,系统将决定在其他参数中传递的字符串的长度。
为了结束DBMS上的会话,可调用SQLDisconnect函数并向其传递想要结束的会话的连接句柄。例如:
SQLDisconnect(hDbc);
SQLConnect 的缺点是:在连接一个数据源之前,我们必须创建它的DSN. SQLDriverConnect提供了更大的灵活性.它的语法如下:
SQLDriverConnect proto ConnectionHandle: DWORD,
hWnd: DWORD,
pInConnectString: DWORD,
InStringLength: DWORD,
pOutConnectString: DWORD,
OutBufferSize: DWORD,
pOutConnectStringLength: DWORD,
DriverCompletion: DWORD
- ConnectionHandle连接句柄
- hWnd 应用程序窗口句柄.如果这个参数被置为NULL,驱动程序将不会为用户显示一个对话框来显示更多信息(如果有的话).
- pInConnectString 指向连接字符串的指针. 这是一个ASCIIZ字符串,格式由要连接的具体ODBC驱动程序描述.它描述了驱动程序名、数据源及其他附加属性.连接字符串的具体描述请参见MSDN,这里不再细述.
- InStringLength 连接字符串的长度.
- pOutConnectString 指向将要被填入完整连接字符串的缓冲区的指针.这个缓冲区将至少有1,024字节长.这听上去使人困惑。事实上,我们提供的连接字符串会不完整,这 时,ODBC驱动程序会提示用户更多信息.接下来ODBC驱动程序会根据所有可能的信息创建一个完整的连接字符串并将其放入缓冲区。即使我们提供的连接字 符串已经可以工作了,这个缓冲区也会填入更多的属性值.这个参数的目的是我们可以保存完整连接字符串来为接下来的连接做准备。
- OutBufferSize 由pOutConnectString指向的缓冲区的长度.
- pOutConnectStringLength 指向一个双字的指针,用来接收由ODBC驱动程序返回的完整连接字符串的长度。
- DriverCompletion 一个标志用来指示ODBC管理器/驱动程序是否将提示用户更多信息.但是,这个标志取决于是否在调用本函数时传送了hWnd 参数一个窗口句柄。如果没有,即使该标志被设置,ODBC管理器/驱动程序也不会提示用户.可能值如下:
SQL_DRIVER_PROMPT | ODBC驱动程序提示用户输入信息。驱动程序将利用这些信息来创建连接字符串 |
SQL_DRIVER_COMPLETE SQL_DRIVER_COMPLETE_REQUIRED | 仅当用户提供的连接字符串不完全时, ODBC驱动程序才会提示用户. |
SQL_DRIVER_NOPROMPT | ODBC驱动程序将不会提示用户. |