不用数据源打开数据库(DSNless connection)

作者:网络 来源:佚名 更新时间:2008-07-02 11:35:59 点击:
  每一个需要联结数据库的程序,首先必须在服务器上打开它。这里有许多的办法!

  使用系统数据源(dsn)
这个就必须在服务器上设置。这是数据访问最好最快的方法。因为它只需在服务器上认证一下就行了,不需要联结。

  使用文件数据源
这不是一个值得推荐的方法。因为这样的话,所有的用户都被限制了!根本不适用于网络。

  不需要dsn的联结
这种方法就不需要在服务器设置任何的东东,只要这个数据库存在就行!当然你也得有访问密码。
这是一个没有办法的办法,因为在服务器上没有dsn设置,而且速度也没有设置dsn快,因为每次都必须和服务器联结一次

  微软有关于这方面的文章在
http://support.microsoft.com/support/kb/articles/q193/3/32.asp
在这里所有的dsnless联结代码。我们在这里只说一小部分,如果觉得我们说的不清楚就到那儿去看英文版吧!
哈哈。

  dsnless联结需你知道数据库文件的名字(i.e. file based databases like access, paradox, foxpro, etc.)或者数据库的服务器地址(sql server就是这样的)。还必须有打开这个数据库的权限,比如密码和用户名。有了这些你就可以打开这个数据库了!嘿嘿!

  不过你要注意,如果你是用的access数据库你就必须知道它的绝对路径,就像"c:\thatserver\account17\nwind.mdb"一样。不过sever.mappath方法能够将相对路径转为绝对路径。我们就不用担心了!

  下面是一个例子例用了dsnless,用它来访问名叫nwind.mdb的access的数据库。文件名为nwind.asp


<html><head>
<title>nwind.asp</title>
<body bgcolor="#ffffff"></head>
<%
accessdb="nwind.mdb"
mydsn="driver={microsoft access driver (*.mdb)};"
mydsn=mydsn & "dbq=" & server.mappath(accessdb)
mysql="select * from customers"

call query2table(mysql,mydsn)
%>
<!--#include virtual="/learn/test/lib_dbtable.asp"-->
</body>
</html>

  下面的例子是使用dsn来访问sql server,文件名为sqldsn.asp


<html><head>
<title>sqldsn.asp</title>
<body bgcolor="#ffffff"></head>
<%
accessdb="nwind.mdb"
mydsn="dsn=student;uid=student;pwd=magic"
mysql="select * from publishers where state='ny'"

call query2table(mysql,mydsn)
%>
<!--#include virtual="/learn/test/lib_dbtable.asp"-->
</body>
</html>
  下面的例子是用dsnless来访问sql server数据库的方法。



<html><head>
<title>sqldsnless.asp</title>
<body bgcolor="#ffffff"></head>
<%

mydb="provider=msdasql;driver={sql server};"
mydb=mydb & "server=sql2.datareturn.com;database=;"
mydb=mydb & "uid=student;pwd=magic;"

mysql="select * from publishers where state='ny'"

call query2table(mysql,mydb)
%>
<!--#include virtual="/learn/test/lib_dbtable.asp"-->
</body>
</html>
包含文件lib_dbtable.asp是以下的内容:


<%
sub query2table(inputquery, inputdsn)
dim conntemp, rstemp
set conntemp=server.createobject("adodb.connection")
conntemp.open inputdsn
set rstemp=conntemp.execute(inputquery)
howmanyfields=rstemp.fields.count -1%>
<table border=1><tr>
<% 'put headings on the table of field names
for i=0 to howmanyfields %>
<td><b><%=rstemp(i).name%></b></td>
<% next %>
</tr>
<% ' now lets grab all the records
do while not rstemp.eof %>
<tr>
<% for i = 0 to howmanyfields
thisvalue=rstemp(i)
if isnull(thisvalue) then
thisvalue="&nbsp;"
end if%>
<td valign=top><%=thisvalue%></td>
<% next %>
</tr>
<%rstemp.movenext
loop%>
</table>
<%
rstemp.close
set rstemp=nothing
conntemp.close
set conntemp=nothing
end sub%>
  大家看明白了吗?嘿嘿,不清楚,那就在到论坛中问问各位大虾吧!

  文章来自http://www.aspcn.com asp中华网如要转载请注明出处,谢谢