在 T00ls 看到个帖子,写了一点东西,在这里记录一下,以后可能用得着。

帖子标题:这段代码是怎么连接数据库的?,内容为:


这段代码是conn.asp

<%
set conn=server.createobject("ADODB.CONNECTION")
conn.open "s2008","xc","s&2008!!"

set lsxdconn=server.CreateObject("Adodb.connection")
lsxdconn.open "ld","xd","dx+2008"
%>

这段是调用conn.asp的login.asp

<%@ Language=VBScript %>
<!--#include file=conn.asp -->
<%
    username=trim(Request.form("username"))
    password=trim(Request.form("password"))

    username=replace(username,"'","''")
    u_password=replace(password,"'","''")
    whereip=Request.ServerVariables("REMOTE_ADDR")

    set rs=server.CreateObject ("ADODB.RecordSet")
    rs.Source="select * from users where username='" & username & "' and  password='" & u_password & "'"
    rs.Open rs.Source,conn,1,3

    if not rs.EOF then
        if rs("lock")="1" then
            response.write"未能登录,请联系网站管理部门"
            response.end
        end if
        
        rs("login_times")=rs("login_times")+1
        rs("login_time")=now()
        session("id")=rs("userid")
        session("username")=trim(rs("username"))
        session("realname")=trim(rs("realname"))
        session("password")=trim(rs("password"))
        session("department")=trim(rs("dept_id"))
        session.timeout=480
        zm=rs("realname")
        rs.update
        rs.close
        
        
        'following steps created by Xuhb
        set rs1=server.CreateObject ("ADODB.RecordSet")
        rs1.Source="select * from stx.dbo.Employee_No where name='" & zm & "'"
        rs1.Open rs1.Source,conn,3,2
        if not rs1.eof then
        session("workno")=rs1("Number")
        else
        session("workno")=zm
        end if
        session("duihua")=zm 
        rs1.close
        'steps end

        set rslog=server.CreateObject("adodb.recordset")
        rslog.source="select top 1 log_time from logfile where username='"&session("id")&"' order by log_time desc"
        rslog.open rslog.source,conn,1,1
        if datediff("n",rslog("log_time"),now())>10 then
            conn.Execute ("update users set score=score+1 where userid="&session("id"))        
        end if
        conn.Execute ("INSERT INTO logfile (username,log_time,log_ip,realname) VALUES ('" & session("id") & "',getdate(),'" & whereip & "','" & zm &"')")
        
        response.redirect"index.asp"
    else
%>
<script language=javascript>
     history.back()
     alert("用户名或密码错误!请重新输入。")
</script>
<%
        Response.End
    end if
%>

服务器的环境是Windows2003+IIS6.0+MSSQL

实在是解不开conn.asp的数据库连接语句

尝试过将上面连接字符串当成MSSQL账号密码来登录、但都登录失败、MSSQL服务是有开放的

第一次遇见这种问题、求解


我给个权威的解答:

 <%
 set conn=server.createobject("ADODB.CONNECTION")
 conn.open "s2008","xc","s&2008!!" '用于描述数据源的字符串,账号,密码
 ……
 %>

----------------------------------------------------------------------------

数据库连接对象(ADODB. Connection)

该对象用于与ODBC数据库建立连接,所有对数据库的操作均通过该连接进行。

数据库连接对象ADODB. Connection的作用象Delphi中的TDatabase对象。

建立一个连接对象的方法为(AConnection为Variant类型变量):

AConnection:=CreateOleObject(’A DODB.Connection’)

用于建立连接的方法为Open,使用语法为(以对象AConnection为例):

AConnection.Open( ConnectionString, UserId, Password )

三个参数均为字符串类型,其中UserId和Password为用户名称和用户密码,用于访问数据库使用时可以省略,因为在ConnectionString同样可以指定用户名称和用户密码。ConnectionString是用来说明ODBC数据源信息的字符串,其格式为:

’Provider=ProviderName; DSN=DSNName; DRIVER=driver; SERVER=server; DATABASE=database; UID=user; PWD=password’

其中:

Provider:数据提供者,默认状态下为MSDASQL,为微软OLEDB,通常省略;

DSN:要打开的数据库对应的OBDC系统数据源(DSN),是可选参数;

DRIVER:要打开的数据库所用的驱动程序名称,如Access对应Microsoft Access Driv (*.mdb),是可选参数;

SERVER:要打开的数据库所在的服务器名称,本机可用(local),是可选参数;

DATABASE:要打开的数据库名称,是可选参数;

UID:用户名称,用来访问数据库,是可选参数;

PWD:用户密码,用来访问数据库,是可选参数。

以上参数均为可选参数,但必须提供足够的信息来描述一个系统数据源。

建立一个ADODB.Connection后,如果不需要返回操作结果(如删除,修改,更新等操作)就可以对数据库进行正常的SQL操作了,此时应用ADODB.Connection的另外一个方法Execute,使用语法为:

AConnection.Execute( strSQL );

其中strSQL为执行操作的SQL语句,如删除操作可以为:delete from wfjcommu。用AConnection.Close关闭一个数据库连接。

----------------------------------------------------------------------------

所以嘛,很显然 s2008 是一个系统数据源名称。

关于:系统数据源 (DSN)

----------------------------------------------------------------------------

如何在 Windows XP 中创建系统数据源名称:

http://support.microsoft.com/default.aspx?scid=kb;zh-cn;305599

数据源名称 (DSN) 是一个逻辑名称,开放数据库连接 (ODBC) 使用它引用驱动器以及访问数据所需的其他信息。Internet 信息服务 (IIS) 使用该名称连接到诸如 Microsoft SQL Server 数据库之类的 ODBC 数据源。若要设置该名称,请使用“控制面板”中的 ODBC 工具。

使用 ODBC DSN 项在外部存储连接字符串值时,简化了连接字符串所需的信息。您这样做的时候,就对数据源做了更改,而这些更改对于代码是完全透明的。本文介绍了如何在 Windows XP 中创建系统数据源名称。

----------------------------------------------------------------------------

数据源名称、Data Source Name、DSN:

http://baike.baidu.com/view/588961.htm#1

原名:Data Source Name

中文名:数据源名称

DSN为ODBC定义了一个确定的数据库和必须用到的ODBC驱动程序。每个ODBC驱动程序定义为该驱动程序支持的一个数据库创建DSN需要的信息。就是说安装ODBC驱动程序以及创建一个数据库之后,必须创建一个DSN。

----------------------------------------------------------------------------

所以,不出意外的话,你可以单击开始,指向控制面板,双击管理工具,然后双击数据源 (ODBC),就能看到你想看到的信息了。

同时,还有各种脚本代码可以列出来当前系统中存在的数据源,网上一搜一大堆。

你可能会问,这么说,"xc","s&2008!!" 就是账号密码了?

不一定,因为在ConnectionString同样可以指定用户名称和用户密码,所具体要看数据源中的信息。

数据源的信息都在注册表里,列出所有DSN:

VB:http://hi.baidu.com/%C3%CD%BB%A2%B3%F6%C1%FDxy/blog/item/45a97a6671fa86faf6365463.html

C#:http://topic.csdn.net/t/20041014/14/3455657.html

其他:http://topic.csdn.net/t/20040326/15/2890167.html