ASP中实现通用的数据库路径文件方法
作者:吕海鹏 文章来源:深度空间原创
在开发ASP + Access的Web应用时,常会遇到数据库文件路径的定位问题。如果在自己的计算机上实现时可以直接指定了事,但如果做的项目要上传到别的服务器或移动别的机器上运行使用,每次都要把这个路径改来改去的话显得有些繁锁,下面结合我做这个网站的经验来解决这个问题,让我们可以“一劳永逸”。
这里以“深度学习网址导航系统”(http://www.deepteach.com/DT_WebDir/)为例,网站的目录结构如下(只列出了相关部分):
DT_WebDir
|- DataBase ’数据库文件目录
| |- data.mdb
|
|- Admin ’后台管理程序所在
| |- login.asp
| |- admin.asp
|
|- index.asp
|- ConnDB.asp ’数据库连接文件
因为index.asp和ConnDB.asp在同一目录下,因此ConnDB.asp中的连接语句这么写的:
Dim ConnStr,Conn
DBpath =”DataBase/data.mdb” ’数据库文件的位置
ConnStr = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”& Server.MapPath(DBPath)
set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.Open ConnStr
直接在index.asp文件中加入语句实现引用
在ASP中使用Server.MapPath (“file.asp”)语句后,会返回该文件在本地驱动器上的绝对路径,如“D:\DT_WebDir\DataBase\data.mdb”“D:\ DT_WebDir\Admin\DataBase\data.mdb”,所以在不同的子目录的不同文件使用这条语句就只会返回那个文件所在路径,这样我们就不能简单地利用这条语句解决上面的问题,但只要稍加利用这条方法和其它与个字符函数就可以轻松解决上面的问题。
只要我们在需要访问数据库的asp文件中加入以下语句。
“深度学习网址导航系统”实现代码如下:
====================
ConnDB.asp文件
====================
Dim DBpath,ConnStr,Conn
DBpath =DBpath & “DataBase/#data.mdb” ’数据库文件的位置
ConnStr = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”& Server.MapPath(DBPath)
On Error Resume Next ’启用错误处理程序
set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.Open ConnStr
’=====================
If Err Then
err.Clear
Set Conn = Nothing
Response.Write ”
数据库连接出错,请检查链接路径和数据库名称!
”
Response.End
End If
’======================
On Error GoTo 0 ’禁用错误处理程序
’┌──────────────────── 深度空间 深度学习 ──┐
’│过程名:CloseConnDB
’│作 用:关闭数据库
’│参 数:无
’│日 期:2006/1/16
’└──────────────────── www.DeepTeach.com ──┘
sub CloseConnDB()
Conn.Close
set conn=nothing
end sub
=======================
只要我们在不同目录的需要访问数据库的asp文件中加入以下语句:
=======================
例如:Class_Manage.asp 如下图:

上述方法实现了在不同目录只需调用一个数据库路径文件,这样在应用时只需更改相对应的这个文件就可以实现整站程序的数据库路径 或数据库文件名的变更……
当你改变你站点的目录名称或移到别的机器的情况下就可以不需要理会数据库文件的存取路径问题了。
设置Cookies的有效时间
Response.Cookies(“user_name”).Expires=Date+1 '指定cookie保存时间
保留COOKIES一个小时
Response.Cookies(“MyCookie”).Expires= (now()+1/24)
Response.Cookies(“MyCookie”).Expires = DateAdd(“h”, 1, Now())
Response.Cookies(“CookieName”).Expires=DateAdd(“m”,60,now())
设置60个月以后过期
Response.Cookies(“User”).expires=second()+7
在expires后面定义的时间可以用时间函数代替
例如:date()+7就表示在今天的时间上加上7天,而second()+7则是7秒了。
Response.Cookies(“字段名”).expires=时间函数+N,例如:
Response.Cookies(“name2”).expires=date+1,表示Cookies保存1天,再比如:
Response.Cookies(“name2”).expires=Hour+8,表示Cookies保存8小时。
这种方法我测试过不行(在2003server,iis6.0中),不管second后面有无加(),访问时会出现500错误(还是无法显示网页?忘了)。
织梦尤文:这里的时间累加建议还是使用DateAdd函数,比如我们要累加一小时,则使用:
Response.Cookies(“baidooglecom”).expires = DateAdd(“h”, 1, Now())
30分钟:
Response.Cookies(“CookieName”).Expires=DateAdd(“n”,30,now())
dateadd(“S”,30,now()) 得到秒
Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,或在许多时候,我们希望能更长时间地在访问者的计算机上保存cookie。必须设置该日期。
若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。
cookie的使用到期时间为“2010年1月1日”: Response.Cookies(“CookieName”).Expires=#January 01, 2010#
cookie的过期时间为“cookie的创建时间+365天”:Response.Cookies(“CookieName”).Expires=Date+365 推荐的
但最好不要随便写 Response.Cookies(“CookieName”).Expires=Date,这样页面之间的调用时值会为空。
Asp使用RecordSet操作数据库实例
在基于微软IIS/PWS的网络平台上,通过服务器端运行的ASP程序来访问后台数据库,是一种最常见的模式了。而对于小型的数据库应用需求,微软的 Access数据库,应该是与ASP程序配套使用的首选。由于Access数据库的ODBC驱动程序支持的SQL指令全,执行效率高,所以Access后台数据库+ASP服务器端程序+客户端IE浏览器,是一个精练实用高效的组合模式。
在这种使用模式中,ASP程序无疑是最重要的,是沟通客户端和后台数据库之间的桥梁。在ASP程序中,通过VB Script,建立对Access数据库的连接,是客户能够访问后台数据库的前提。
一、建立Access数据库连接的常用方法
在ASP中建立对Access数据库连接的一般格式如下:
<%
DbPath=Server.MapPath(数据库名)
Set Conn=Server.CreatObject(“ADODB.Connection”)
Conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=”& DbPath
Set rs=Server.CreatObject(“ADODB.Recordset”)
Rs.Open 数据表名或SQL指令,Connection对象,Recordset类型,锁定类型
… …
%>
它的各步骤及参数意义如下:
第一行程序:利用Server对象的MapPath函数,取得要打开数据库的完整的文件路径,并存储在变量DbPath中。这其中,数据库名是我们需要指定的参数,应该用我们要打开的数据库的实际名称替代。如果数据库名是直接作为常量出现,要用引号将其括起来,并且不能丢掉扩展名。例如数据库是Test.mdb,则该行程序成为:DbPath=Server.MapPath(“Test.mdb”)。
第二行程序:建立一个ADO对象集中的Connection对象,也即连接对象。这是建立数据库连接的初始步骤。执行这行程序后,Conn成为一个连接对象。
第三行程序:利用连接对象Conn的Open方法打开一个指定的数据库。因为我们要打开的是Access数据库,所以要指定ODBC驱动程序参数,表示要透过Access的ODBC驱动程序来访问数据库:driver={Microsoft Access Driver (*.mdb)};。另一个参数dbq= & DbPath,运算后等效于dbq=Server.MapPath(数据库名) ,是利用了第一行的Server.MapPath(数据库名)函数,用来指定要打开的数据库文件。到这里,就已经打开了数据库名指定的数据库。如果数据库名是“test.mdb”,则打开Access数据库Test.mdb。在这一行里指定的参数,要严格按照格式原样写出,不能省略或改动,也没有可变参数。
第四行程序:建立一个ADO对象集中的Recordset对象,以便利用Recordset对象操作数据库(当然,这只是对数据库操作的多种方式之一)。执行这行后,rs就成为一个Recordset对象。
第五行程序:利用rs对象的Open方法打开数据库中的数据表。这其中有四个参数,其意义如下:
数据表名或SQL指令串:在这个参数里指定要打开的数据库内的数据表名称,或者是用SQL的Select指令串确定的数据表的指定范围数据,例如,数据库Test.mdb中有数据表Number,则该参数成为“Number”,注意引号不能丢;若想打开数据表Number中xh字段值小于90 的数据记录,则该参数可能成为如下的形式:
“Select * From Number Where xh < 90”。
Connection对象:指定已经打开的数据库的Connection对象,在这里固定是Conn,注意无须引号的。
Recordset类型:表示打开数据表的方式,有四种选择。数字0表示只读方式,且当前记录只能下移;数字1表示可读写方式,当前记录可自由上下移动,但不能及时看到别的用户建立的新记录,除非重新启动;数字2表示可读写方式,当前记录可自由移动,而且可以及时看到别的用户增加的新记录;数字3表示只读方式,但当前记录可以自由移动。一般选择2为好,除非为了禁止数据被修改。
锁定类型:这个参数指定数据库的锁定功能。因为网络上的数据库都是多用户的,很可能同时有多个用户在操作数据库。为了避免错误,让同一时间只可能有一个用户修改数据,就要用锁定功能。有四种选择:数字1表示只读方式锁定,用户不能更改数据;数字2表示悲观锁定,当一个用户用rs对象开始修改数据时就锁定数据库,直到用户用rs.Update更新记录后,才解除锁定;数字3表示乐观锁定,只有在数据写入数据库中时候才锁定,不保险,慎用!数字4 表示批次乐观锁定,只有在使用rs.UpdateBatch成批更新数据时候才锁定数据记录。属于很少使用的。一般地,使用悲观锁定比较安全,但是效率要低些。
二、使用Recordset对象操作数据
用上面的方法打开数据库,是利用了Recordset对象建立的数据库连接,然后的对数据操作,也要使用该对象。
用rs.open “数据表名”,Conn,2,2 方式打开数据表,就可以方便的对数据进行操作:
常见的操作对象:
rs.addnew :添加一个新记录在数据表末尾。
rs.delete :删除当前记录。
rs.eof :判断是否已过最后记录。
rs.bof :判断是否移过首记录。
rs.update :数据修改生效。
rs(“字段名”):当前记录指定字段的值。
从数据表中提取数据:用x=rs(“字段名”)的格式,提取数据表中当前记录指定字段的值。
向数据表中填入或修改数据:用rs(“字段名”)=数据值或变量的方式,修改当前记录指定字段的值。
三、使用SQL指令操作数据库
在使用SQL指令对数据库进行操作时,要用如下方式打开数据库和操作:
<%
DbPath=Server.MapPath(数据库名)
Set Conn=Server.CreatObject(“ADODB.Connection”)
Conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=”& DbPath
Sql=操作数据库的指令串
Conn.Execute sql
… …
%>
四、使用DSN连接数据库
在以上连接数据库的方式中,都是在程序中指定数据库,指定ODBC驱动程序。如果数据源有变化,就需要修改程序。如果在系统级别上,预先定义好数据源DSN,就可以避免这个麻烦。
在定义DSN的过程中,就已经指定好了数据源需要的ODBC驱动程序,也指定好了数据库文件的实际路径和名字,我们在程序中,只需要引用预先定义的数据源名DSN即可。
设定义好的DSN为test,则打开数据库的方式为:
<%
Set Conn=Server.CreatObject(“ADODB.Connection”)
Conn.Open “DSN=test”
Set rs=Server.CreatObject(“ADODB.Recordset”)
Rs.Open 数据表名或SQL指令,Connection对象,Recordset类型,锁定类型
… …
%>
五、结束语
在ASP程序中,建立数据库的连接和访问数据库,有很多方式和技术细节,在此难以一一详述。实际上,对SQL Server数据库,DBF数据库,文本文件,电子表格文件等,也都可以很方便的打开和访问,与对Access数据库的访问大同小异而已。如果说方便, Access应该是首选。如果考虑安全保密性,SQL数据库更好些。使用系统数据源DSN的方式建立对数据库的连接,具有更大的灵活性,也更简便些。
Asp使用SQL操作数据库实例
用ASP操作数据库时,很多人都使用记录集,但我觉得用SQL语句更好些,于是就写了这篇文章,希望对你有帮助。
<%
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'以下段为连接数据库和断开连接(数据库为Access格式,采用DSN来连接)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub connect()
dsn="FILEDSN=acces.dsn" 'dacces.dsn为mdb文件的dsn,在配置ODBC时建立,如果要上传文件的话,可以把access.dsn一同上传
set cnn=server.createobject("ADODB.Connection") '建立ADO对象
cnn.open dsn '打开当前目录下的dsn文件(dsn为access文件的dsn)
response.write "数据库连接成功:" & cnn.state & "
”
cnn.close '关闭连接
response.write”数据库已经关闭” & cnn.state & “
”
set cnn=nothing '清除变量
end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'以下段为操纵数据库(查询内容)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub sel()
dsn=”FILEDSN=acces.dsn” 'dacces.dsn为mdb文件的dsn
set cnn=server.createobject(“ADODB.Connection”) '建立ADO对象
cnn.open dsn '打开当前目录下的dsn文件(dsn为access文件的dsn)
'送出操作,并得到结果
SQL=”select * from user” '构造SQL语句
set rs=cnn.Execute(sql) '送出SQL
'一个循环把记录集中的记录内容全部输出
while not rs.eof
values=rs(“name”)
response.write values & “
”
rs.movenext
wend
rs.close
cnn.close
set cnn=nothing
end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'以下段为操纵数据库(修改内容)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub modi()
dsn=”FILEDSN=acces.dsn” 'dacces.dsn为mdb文件的dsn
set cnn=server.createobject(“ADODB.Connection”) '建立ADO对象
cnn.open dsn '打开当前目录下的dsn文件(dsn为access文件的dsn)
sql=”update user set name='这是程序' where name='A'” '构造修改SQL语句
cnn.Execute sql '送出SQL
cnn.close
set cnn=nothing
end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'以下段为操纵数据库(删除内容)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub del()
dsn=”FILEDSN=acces.dsn” 'dacces.dsn为mdb文件的dsn
set cnn=server.createobject(“ADODB.Connection”) '建立ADO对象
cnn.open dsn '打开当前目录下的dsn文件(dsn为access文件的dsn)
sql=”delete from user where name='B'” '构造删除SQL语句
cnn.Execute sql '送出SQL
cnn.close
set cnn=nothing
end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'以下段为操纵数据库(添加内容)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub add()
dsn=”FILEDSN=acces.dsn” 'dacces.dsn为mdb文件的dsn
set cnn=server.createobject(“ADODB.Connection”) '建立ADO对象
cnn.open dsn '打开当前目录下的dsn文件(dsn为access文件的dsn)
'sql=”insert into user (name,sex,note) values ('tt','tt','tt')” '构造添加SQL语句
'cnn.Execute sql '送出SQL
cnn.close
set cnn=nothing
end sub
%>
虚拟现实的应用
过去一直在试验阶段的虚拟现实website,现在终于看到实际应用了
地址:
http://www.there.com
我的帐号loong,现在进入后的截图,还不知道怎么跟人打招呼呢,呵呵
iframe样式定义
释成“浏览器中的浏览器“很是恰当
Asp操作Cookies实例
首先是前台的表单域:
Asp操作Cookies简介
Cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个Web站点会话之间持久地保持数据。Request和 Response对象都有一组Cookie。Request.cookie集合是一系列Cookie,从客户端与HTTP Request一起发送到Web服务器。反过来,如果你希望把Cookie发送到客户机,就可以使用Response.cookie
1、ExpiresAbsolute属性
该属性可以赋一个日期,过了这个日期Cookie就不能再被使用了。通过给Expires属性赋一个过期的日期,就可以删除Cookie。如:
<%Response.cookies("passtime").expiresAbsolute="1/1/99"%>
2、Domain属性
该属性定义Cookie要传送的唯一域。如:Cookie只传送给Microsoft的人,则可以使用以下代码。
<%Response.Cookies("domain").Domain="www.microsoft.com"%>
3、ASP用来写入Cookie即向客户机发送Cookie的语法如下:
Response.Cookie(“Cookie名”).[(“键名”).属性]=内容
如果某个ASP文件要创建一个Cookie,则下面的代码可以放在ASP文件的第一个之前,以避免产生错误.
<%Response.Cookies("CookieName")="NewCookie" %>
……
4、同样ASP用Request对象的Cookies集合来读取Cookie,如:
<%Response.write Request.Cookies("CookieName")%>
下面以一个完整的例子来说明Cookie:
<%
dim Num
Num=Request.Cookies("Visit_num")
if Num>0 then
Num=Num+1
Response.write “您已是第” & Num & “次访问本站点了。”
else
Response.write “欢迎您首次访问本站。”
Num=1
end if
Response.Cookies(“Visit_num”)=Num
%>
在该例子中,首先读取Cookies变量Visit_num,看用户端计算机是否保存有Cookies变量。如果有该变量,则说明用户已经访问过该页面,同时输入出访问次数。如果用户是首次访问该页面,则其计算机内不会有Cookies变量,程序会显示“欢迎”字样,然后将Cookies变量 Visit_num存到用户计算机中,以便该用户下一次访问该页面时给出“访问的次数”信息。
5、Cookie字典
有时在一个页面中可能需要定义很多个Cookies变量,为了更好地管理它,在Cookies组件中常引入一人的概念“子键”。引用它的语法如下:
Request.Cookies(“变更名”)(“子键名”)
如下面的Cookie创建一个名为”Dictionary”的字典,其中保存了三个键值:
<%
Response.Cookie("info")("Myname")="jeff"
Response.Cookie("info")("Gender")="male"
Response.Cookie("info")("Myheight")="172"
%>
事实上客户机上的Cookie字典是以字符串的形式存在:
info=Myname=jeff&Gender=male&Myheight=172
如果用户没有指定“子键”名而直接引用Cookies变量,将会返回一个包含所有的“子键”名及值的字符串。例如上面这个例子包含三个“子键”: “Myname”、”Gender”和”Myheight”,当用户没有指定其“子键”而直接通过Request.Cookies(“info”)来引用时,则会得到下列字符串:
info=Myname=jeff&Gender=male&Myheight=172
如果要把Cookie中读取的所有数据,可以用下面的代码得到:
<%For each cookie in Request.Cookies
if Not cookie.HasKeys then
Response.write cookie & "=" & Request.Cookies(cookie)
Else
for each key in Request.Cookies(cookie)
Response.write cookie&"("&key&")"&"="& Request.Cookies(cookie)(key)
next
end if
next
%>
[转]Local Access URLs in Adobe AIR
转自:http://www.jeffryhouser.com/index.cfm/2008/2/19/Local-Access-URLs-in-Adobe-AIR
Local Access URLs in Adobe AIR
Posted At : February 19, 2008 9:00 AM | Posted By : Jeffry Houser
Related Categories: Flex,Professional,AIR
One of the benefits of Adobe AIR, over a browser based application, is that you can have access to the local file system. This question came up on the House of Fusion Flex Coders list; and I thought I'd blog the answer.
I truncated the original question a bit.
I've got an Flex/AIR app which contains a SQLite db and some photos which will be included in the install package.
[cut]
I need to open the db file locally [without using a hard coded absolute path]
How might I go about referencing it this file so that it will work both in development, and installed?
Adobe AIR offers two URL schemes for accessing the local file system. Documentation is here.
* app:/: App URLs are relative to the application install directory. This is what the poster would need to access the assets he was distributing with his application.
* app-storage:/: The app-storage URL will get you to the application's storage directory. On a Windows (XP) machine this is under “Documents and Settings/username/applicationdata/”
As an indirect correlation, if you need the absolute paths to the application install directory or the application root directory, you can get them using the File Class.
Somewhere in your ActionScript code, just import the class:
import flash.filesystem.File;
Two static variables exist on the File class, applicationDirectory and applicationStorageDirectory. This code saves them to local variables:
public var appDirectory : String = File.applicationDirectory ;
public var storageDirectory : String = File.applicationStorageDirectory ;
Since these are static properties you do not need to create an instance of the file class to access them. I'm not sure if one method is preferred over the other, as both seem easily transportable between systems and applications.
On Wednesday the 20th, I'll be all over. I'll be speaking to a business group at the Meriden Connecticut Chamber of Commerce in the morning. I'm speaking as part of their Small Business Institute; and will be speaking on the differences between web sites, web applications, and Internet applications.
In the evening, I'm off to the Boston User Group to speak on code reuse between Flex and AIR. This will be my last time giving the presentation before heading off to 360Flex in Atlanta. Are you in Atlanta and want to get together sometime on Saturday -Wednesday let me know.
The Flex Non-Docs
这里收集了AdobeFlex文档中没有涉及到的知识点,给Adobe的官方文档做了查缺补漏工作
实属难得
地址:
http://nondocs.blogspot.com/
Mikel