?? 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 + -