📄 odbc-c2.htm
字号:
addr hEnv<br>
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO<br>
invoke SQLSetEnvAttr,
hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, NULL<br>
.if ax==SQL_SUCCESS ||
ax==SQL_SUCCESS_WITH_INFO<br>
invoke
SQLAllocHandle, SQL_HANDLE_DBC, hEnv, addr hConn<br>
.if
ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO</font></b></font></p>
<h4><font face="Tahoma" color="#FFFFCC">建立一个连接</font></h4>
<p><font face="Tahoma" size="-1">我们现在要通过特定的ODBC驱动程序来连接数据源.通过这三个ODBC函数来达成这个目标.它们为我们提供了好几层"选择".</font></p>
<table border="1" cellspacing="1" cellpadding="3" align="center">
<tr>
<td bgcolor="#003399"><font face="Tahoma" size="-1">SQLConnect</font></td>
<td bgcolor="#666600"><font face="Tahoma" size="-1">Core</font></td>
<td bgcolor="#660066"><font face="Tahoma" size="-1">这是最简单的函数。它只需要数据源名(DSN,Data source name)和可选的用户名和密码.它不提供任何GUI选项例如向用户显示一个对话框来提供更多信息。如果你已经有了需要使用的数据库的DSN就可以使用这个函数.</font></td>
</tr>
<tr>
<td bgcolor="#003399"><font face="Tahoma" size="-1">SQLDriverConnect</font></td>
<td bgcolor="#666600"><font face="Tahoma" size="-1">Core</font></td>
<td bgcolor="#660066"><font face="Tahoma" size="-1">这个函数提供了较<b>SQLConnect</b>更多的选择.我们可以连接一个没有在系统信息内定义的数据源。如没有DSN.另外,我们可以指定这个函数是否需要显示一个对话框来为用户提供更多信息.例如,如果用户遗漏了数据库的名字,它会指导ODBC驱动程序显示一个对话框,让用户来选择想连接的数据库.</font></td>
</tr>
<tr>
<td bgcolor="#003399"><font face="Tahoma" size="-1">SQLBrowseConnect</font></td>
<td bgcolor="#666600"><font face="Tahoma" size="-1">Level 1</font></td>
<td bgcolor="#660066"><font face="Tahoma" size="-1">这个函数允许在运行时(RunTime)枚举数据源.比<b>SQLDriverConnect</b>更加灵活。因为可以多次顺序调用<b>SQLBrowseConnect</b>,而每次提供给使用者更多的专用信息直到最后获得需要的连接句柄.</font></td>
</tr>
</table>
<p><font face="Tahoma" size="-1">我将先检查<font color="#FFFFCC"><b>SQLConnect</b></font>函数.要使用<font color="#FFFFCC"><b> SQLConnect</b></font>,你应先知道什么是DSN. DSN是数据源名(Data Source Name)的缩写,是一个唯一标识某数据源的字符串。一个DSN标识了一个包含了如何连接某一特定的数据源的信息的数据结构.这个信息包括要使用何种ODBC驱动程序及要连接哪个数据库.我们可以通过控制面板中的32位ODBC数据源来创建、修改及删除DSN. </font></p>
<p><font face="Tahoma" size="-1">SQLConnect的语法如下:</font></p>
<blockquote>
<pre><font face="Tahoma"><b><font color="#CCFFCC">SQLConnect proto ConnectionHandle:DWORD<br> pDSN:DWORD,<br> DSNLength:DWORD,<br> pUserName:DWORD,<br> NameLength:DWORD,<br> pPassword:DWORD,<br> PasswordLength:DWORD</font></b></font></pre>
</blockquote>
<ul>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">ConnectionHandle</font></b></font><font face="Tahoma" size="-1">.
要使用的连接句柄.</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">pDSN</font></b></font><font face="Tahoma" size="-1">.
指向DSN的指针.</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">DSNLength</font></b></font><font face="Tahoma" size="-1">.
DSN的长度</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">pUserName</font></b></font><font face="Tahoma" size="-1">.
指向用户名的指针</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">NameLength</font></b></font><font face="Tahoma" size="-1">.
用户名的长度</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">pPassword</font></b></font><font face="Tahoma" size="-1">.
指向该用户名所使用密码的指针</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">PasswordLength</font></b></font><font face="Tahoma" size="-1">.
密码的长度</font></li>
</ul>
<p><font face="Tahoma" size="-1">在最小情况下, <font color="#FFFFCC"><b>SQLConnect</b></font>
需要连接句柄,DSN和DSN的长度。如果数据源不需要的话,用户名和密码就不是必须的.函数的返回值与<font color="#FFFFCC"><b>SQLAllocHandle</b></font>的返回值相同.</font></p>
<p><font face="Tahoma" size="-1">假设我们的系统中有一个叫做"Sales"
的DSN并且我们想连接这个数据源.我们可以这样做:</font></p>
<p><font face="Tahoma" size="-1"><b><font color="#33CCCC">.data<br>
DSN db "Sales",0</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.code<br>
......<br>
invoke SQLConnect, hConn,
addr DSN, sizeof DSN,0,0,0,0</font></b></font></p>
<p><font face="Tahoma" size="-1"><font color="#FFFFCC"><b>SQLConnect</b></font>
的缺点是:在连接一个数据源之前,我们必须创建它的DSN.<font color="#FFFFCC"><b>
SQLDriverConnect </b></font>提供了更大的灵活性.它的语法如下:</font></p>
<blockquote>
<pre><b><font face="Tahoma" color="#CCFFCC">SQLDriverConnect proto ConnectionHandle:DWORD,<br> hWnd:DWORD,<br> pInConnectString:DWORD,<br> InStringLength:DWORD,<br> pOutConnectString:DWORD,<br> OutBufferSize:DWORD,<br> pOutConnectStringLength:DWORD,
DriverCompletion:DWORD</font></b></pre>
</blockquote>
<ul>
<li><b><font color="#FFCCFF" size="-1">ConnectionHandle</font></b><font face="Tahoma" size="-1">连接句柄</font></li>
<li><font face="Tahoma" size="-1"><b><font color="#FFCCFF">hWnd</font></b> 应用程序窗口句柄.如果这个参数被置为NULL,驱动程序将不会为用户显示一个对话框来显示更多信息(如果有的话).</font></li>
<li><font color="#FFCCFF" size="-1"><b><font face="Tahoma">pInConnectString</font></b></font><font face="Tahoma" size="-1">
指向连接字符串的指针. 这是一个ASCIIZ字符串,格式由要连接的具体ODBC驱动程序描述.它描述了驱动程序名、数据源及其他附加属性.连接字符串的具体描述请参见MSDN,这里不再细述.</font></li>
<li><font color="#FFCCFF" size="-1"><b><font face="Tahoma">InStringLength</font></b></font><font face="Tahoma" size="-1">
连接字符串的长度.</font></li>
<li><font face="Tahoma" size="-1"><b><font color="#FFCCFF">pOutConnectString</font></b>
指向将要被填入完整连接字符串的缓冲区的指针.这个缓冲区将至少有1,024字节长.这听上去使人困惑。事实上,我们提供的连接字符串会不完整,这时,ODBC驱动程序会提示用户更多信息.接下来ODBC驱动程序会根据所有可能的信息创建一个完整的连接字符串并将其放入缓冲区。即使我们提供的连接字符串已经可以工作了,这个缓冲区也会填入更多的属性值.这个参数的目的是我们可以保存完整连接字符串来为接下来的连接做准备。</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">OutBufferSize </font></b></font><font face="Tahoma" size="-1">由<font color="#FFCCFF"><b>pOutConnectString</b></font>指向的缓冲区的长度.</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">pOutConnectStringLength</font></b></font><font face="Tahoma" size="-1">
指向一个双字的指针,用来接收由ODBC驱动程序返回的完整连接字符串的长度。</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">DriverCompletion</font></b></font><font face="Tahoma" size="-1">
一个标志用来指示ODBC管理器/驱动程序是否将提示用户更多信息.但是,这个标志取决于是否在调用本函数时传送了<font color="#FFCCFF"><b>hWnd </b></font>参数一个窗口句柄。如果没有,即使该标志被设置,ODBC管理器/驱动程序也不会提示用户.可能值如下:<br>
<br>
</font>
<table border="1" cellspacing="1" cellpadding="3" align="center">
<tr>
<td bgcolor="#003366"><b><font face="Tahoma" size="-1">SQL_DRIVER_PROMPT</font></b></td>
<td bgcolor="#006666"><font face="Tahoma" size="-1">ODBC驱动程序提示用户输入信息。驱动程序将利用这些信息来创建连接字符串.</font></td>
</tr>
<tr>
<td bgcolor="#003366"><b><font face="Tahoma" size="-1">SQL_DRIVER_COMPLETE<br>
SQL_DRIVER_COMPLETE_REQUIRED </font></b></td>
<td bgcolor="#006666"><font face="Tahoma" size="-1">仅当用户提供的连接字符串不完全时, ODBC驱动程序才会提示用户.</font></td>
</tr>
<tr>
<td bgcolor="#003366"><b><font face="Tahoma" size="-1">SQL_DRIVER_NOPROMPT</font></b></td>
<td bgcolor="#006666"><font face="Tahoma" size="-1">ODBC驱动程序将不会提示用户.</font></td>
</tr>
</table>
<font face="Tahoma" size="-1"> </font></li>
</ul>
<p><font face="Tahoma" size="-1"><b><font color="#33CCCC">例子:</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.data<br>
strConnect db "DBQ=c:\data\test.mdb;DRIVER={Microsoft Access Driver (*.mdb)};",0
</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.data?<br>
buffer db 1024 dup(?)<br>
OutStringLength dd ?</font></b></font></p>
<p><font color="#33CCCC"><b><font face="Tahoma" size="-1">.code<br>
.....<br>
invoke SQLDriverConnect, hConn, hWnd, addr strConnect,
sizeof strConnect, addr buffer, sizeof buffer, addr OutBufferLength, SQL_DRIVER_COMPLETE</font></b></font></p>
<h4><font face="Tahoma" color="#FFFFCC">断开与数据源的连接</font></h4>
<p><font face="Tahoma" size="-1">在连接顺利完成后,我们就可以对数据源进行查询及其他操作.这些将在下一节讨论.现在假设我们已完成了对数据源的操作,就可以通过调用<font color="#FFFFCC"><b>SQLDisconnect</b></font>来断开与它的连接.
这个函数非常简单(就象那悲伤而冷酷的现实:毁灭总比创造容易的多).它只需要一个参数:连接句柄。</font></p>
<blockquote>
<p><font face="Tahoma" size="-1"><b><font color="#33CCCC">invoke SQLDisconnect,
hConn</font></b></font></p>
</blockquote>
<h4><font color="#FFFFCC" face="Tahoma">释放连接与环境句柄</font></h4>
<p><font face="Tahoma" size="-1">在顺利地断开连接后,我们现在可以调用<font color="#FFFFCC"><b>SQLFreeHandle</b></font>函数来销毁连接句柄和环境句柄.
这是由ODBC 3.x提供的新函数.它替代了<font color="#FFFFCC"><b>SQLFreeConnect</b></font>,
<font color="#FFFFCC"> <b>SQLFreeEnv</b></font>及<font color="#FFFFCC"><b>SQLFreeStmt</b></font>函数.
SQLFreeHandle语法如下:</font></p>
<blockquote>
<pre><font face="Tahoma"><b><font color="#CCFFCC">SQLFreeHandle proto HandleType:DWORD, Handle:DWORD</font></b></font></pre>
</blockquote>
<ul>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">HandleType</font></b></font><font face="Tahoma" size="-1">
标识要销毁句柄的类别的常数.可能值与<font color="#FFFFCC"> <b>SQLAllocHandle</b></font>中相同</font></li>
<li><font color="#FFCCFF"><b><font face="Tahoma" size="-1">Handle</font></b></font><font face="Tahoma" size="-1">要销毁的句柄.</font></li>
</ul>
<p><font face="Tahoma" size="-1">For example:</font></p>
<blockquote>
<p><font face="Tahoma" size="-1"><b><font color="#33CCCC">invoke SQLFreeHandle,
SQL_HANDLE_DBC, hConn<br>
invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv</font></b></font></p>
</blockquote>
<p align="center"><b><font face="Tahoma" size="-1"><a href="odbc-c1.htm">[<<]</a>
<a href="odbc-index.html">[index]</a> <a href="odbc-c3.htm">[>>]</a></font></b></p>
<hr>
<p align="center"><b><font face="Tahoma" size="-1">[<a href="http://win32asm.cjb.net">Iczelion's
Win32 Assembly Homepage</a>]</font></b></p>
<p align="center"><b><font face="Tahoma" size="-1">[The Chinese Portion Is Translated By <a href="mailto:hw1979@263.net">Orochi</a> ,2000.8.21 ]</font></b></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -