zoukankan      html  css  js  c++  java
  • ASP 连接 MySQL 数据库两种方法

    一般都是用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的语法

  • 相关阅读:
    vim中字符串的替换
    利用nginx 来实现内网yum源(反向代理)
    linux下分卷压缩,合并解压的3种方法
    Lua io.lines()
    Springboot入门:
    GitHub起步---创建第一个项目
    常用的git命令
    Linux下安装Git
    Mysql连接报错:1130-host ... is not allowed to connect to this MySql server如何处理
    windows下开启远程连接Mysql
  • 原文地址:https://www.cnblogs.com/Gbeniot/p/3831531.html
Copyright © 2011-2022 走看看