一般都是用myodbc來連接。首先,在系統中安裝 Mysql 的ODBC數據庫驅動。如安裝穩定版本是3.51.下載地址是:http://dev.mysql.com/downloads/connector/odbc/3.51.html。
下載安裝好后。在控制面板-->管理工具-->數據源 (ODBC)中的“驅動程序”頁中如果有MySQL ODBC 3.51 Driver就說明驅動已經安裝成功,就可以開始寫程序了。
下面是我測試時使用的程序,里面有說明就不再介紹了。
方法一:
<% '設置MySql連接屬性 '各個變量說明: ' myHost:MySql數據庫地址 ' myDB:使用的MySql數據庫名 ' myUID:連接MySql數據庫使用的帳號 ' myPWD:連接MySql數據使用帳號的密碼 ' myChareSet:客戶端使用的編碼類型。根據實際情況使用。 ' 一般情況下使用gb2312 utf8 gbk這三種編碼。如果這三種都測試過仍然有亂碼。 ' 請檢查你的設置。 '數據庫設置開始 dim myHost,myDB,myUID,myPWD myHost = "localhost" myDB = "knowldge" myUID = "root" myPWD = "mysqladmin" myChareSet = "gb2312" strconnection="driver={mysql odbc 3.51 driver};server=" & myHost & ";database=" & myDB & ";user name=" & myUID & ";password=" & myPWD set conn = server.createobject("adodb.connection") '連接數據庫 conn.open strconnection '設置客戶端字符編碼 conn.execute("set names '" & myChareSet & "'") '不加此語句漢字部分可能會出現???亂碼 '數據庫設置結束 %>
或:
set conn = server.createobject("adodb.connection") Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=127.0.0.1;DATABASE=Shops;USER=root;PASSWORD=xxx;"
上面是使用ADODB的連接方法,在默認3306端口是正常。
但在端口改成3333了,就出錯。
SERVER=127.0.0.1:3333; 這樣也不對,在PHP這樣是可以用的
SERVER=127.0.0.1,3333; MSSQL是這樣改端口,但在這是錯的。
這樣可能可以:
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=127.0.0.1;PORT=3333;DATABASE=Shops;USER=root;PASSWORD=xxx;"
方法二:
另外還可以先在ODBC數據源里新建一個系統DSN,選擇 MySQL ODBC 3.51 Driver作為數據源,填入相關的用戶名和密碼並測試之。相關的ASP連接代碼如下:
strconnection="dsn=dbdsn;driver={mysql odbc 3.51 driver};uid=dbuser;password=dbpwd" 'dsn:新建的DSN名稱 'uid:用戶名 'password:密碼 set con = server.createobject("adodb.connection") con.open strconnection
需要注意的問題(mysql4.1及以上版本)
mysql4.1及以上版本對字符集的限定跟之前的版本有很大不同,在進行數據庫查詢的時候如果不對字符集加以設定,一旦有查詢的字段有中文,便很可能出現下面這樣的錯誤:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ‘80040e31’
[MySQL][ODBC 3.51 Driver][mysqld-4.1.18]Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation ‘=’
這個時候就需要對asp的查詢語句進行一些修改,增加有關的字符集的設定:
"select email from members where username=_gbk '"&username&"' COLLATE gbk_chinese_ci"
代碼示例解釋如下:如使用下面代碼鏈接
示例1:
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & strIP & ";DATABASE=" & strDBName & ";USER=" & strUserName & ";PASSWORD=" & strPass & ";OPTION=3;"
如果MyODBC版本不同,請自行修改Driver中的字符串
<% strconnection="dsn=mysqltest; driver={mysql odbc 3.51 driver}; server=填入服務器地址;uid=用戶名;pwd=密碼;database=mm" '連接字符串,dsn就是我們設置的數據源標識符 注意driver我們剛才在設置系統DSN的時候提過。 set conn = server.createobject("adodb.connection") conn.open strconnection sql = "select * from my" 'SQL查詢語句 set rs = conn.execute(sql) if not rs.bof then %>
示例2:
<% '測試讀取MySql數據庫的內容 strconnection="driver={mysql odbc 3.51 driver};database=weste_net;server=localhost;uid=root;password=" '無需配置dsn set adodataconn = server.createobject("adodb.connection") adodataconn.open strconnection strquery = "select * from News" set rs = adodataconn.execute(strquery) if not rs.bof then %> <table> <tr> <td<b>序列號</b></td> <td><b>標題</b></td> </tr> <% do while not rs.eof %> <tr> <td><%=rs("News_id")%></td> <td><%=rs("News_Title")%></td> </tr> <% rs.movenext loop %> </table> <% else response.write("無數據.") end if rs.close adodataconn.close set adodataconn = nothing set rsemaildata = nothing %>
示例3:
<% Dim Conn, sConnString, myChareSet,strquery myChareSet = "gb2312" sConnString="driver={mysql odbc 3.51 driver};database=portaldata;server=localhost;uid=root;password=123456" Set Conn=Server.CreateObject("adodb.Connection") Conn.open sConnString conn.execute("set names '" & myChareSet & "'") '不加上面語句漢字部分可能會出現???亂碼 %> <% strquery = "select * from Article" Set rs = Server.CreateObject("Adodb.RecordSet") rs.open strquery, Conn, 1, 1 'set rs = Conn.execute(strquery) if not rs.bof then %> <table> <% do while not rs.eof %> <tr> <td>編號</td> <td>標題</td> </tr> <tr> <td><%=rs("AID")%></td> <td><%=rs("Atitle")%></td> </tr> <% rs.movenext Loop %> </table> <% else Response.Write("無數據!") End if rs.close Set rs=Nothing Conn.Close Set Conn=Nothing %>
注意:若使用上面代碼出現如下錯誤
錯誤類型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21) ODBC 驅動程序不支持所需的屬性。
則可能是MySql中不支持select top 10 *……,不支持top 10的語法