知识

asp数据库连接

时间:2010-12-5 17:23:32  作者:时尚   来源:综合  查看:  评论:0
内容摘要: asp数据库连接 老张的网站后台又白屏了。他盯着浏览器里那行“Microsoft JET Database Engine 错误 '80004005'”,骂了句脏话,然后熟练地打开conn.asp文件

asp数据库连接

老张的据库网站后台又白屏了。他盯着浏览器里那行“Microsoft JET Database Engine 错误 '80004005'”,连接骂了句脏话,据库然后熟练地打开conn.asp文件,连接把数据库路径从相对路径改成了绝对路径。据库这已经是连接这个月第三次了。

ASP连接数据库,据库说穿了就三样东西:连接字符串、连接Connection对象、据库然后打开它。连接但就是据库这三样东西,能玩出无数种死法。连接最常见的据库坑是路径问题——你本地测试好好的,上传到服务器就报错,连接八成是据库数据库文件没跟着走,或者路径写死了。我见过有人把数据库放在根目录下,连接字符串里写Server.MapPath("data.mdb"),结果网站发布到虚拟目录下,整个就废了。

连接字符串的写法有讲究。Access数据库用Provider=Microsoft.Jet.OLEDB.4.0;Data Source=,SQL Server得换Provider=SQLOLEDB;Server=...;Database=...;Uid=...;Pwd=...。很多人搞混这两套,尤其新手,拿Access的连接串去连SQL Server,报错报得莫名其妙。实际上,你只要记住:Access是文件型数据库,SQL Server是服务型数据库,两者的连接逻辑本质不同。

代码写起来倒是简单。一个标准流程是:

Dim conn Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/data.mdb") ' 执行查询... conn.Close Set conn = Nothing 

这段代码看着干净,但坑在细节。比如conn.Close之后一定要Set conn = Nothing,否则连接池里残留对象,高并发时直接拖垮IIS。再比如,每次页面执行完,连接必须关闭,不关的话,Access数据库文件会被锁死,别人想写入数据就报“不能更新。数据库或对象为只读”。

有个细节很多人不注意:Access数据库本身是文件,IIS进程要读写它,得给数据库文件所在的文件夹设置写权限。默认情况下,IIS匿名用户(IUSR_机器名)对文件夹只有读取权限,你程序里执行INSERT、UPDATE操作,就会碰到“操作必须使用一个可更新的查询”这种鬼话。解决办法是右键文件夹→属性→安全→添加IUSR用户→勾选完全控制。就这么一步,能救回你半天时间。

还有编码问题。老ASP默认是ANSI,你数据库里存了中文,页面用UTF-8输出,结果就是满屏乱码。解决办法是连接字符串里加Character Set=UTF-8,或者直接在页面顶部写Response.CodePage = 65001。但别两处都加,加了反而冲突——我就吃过这亏,调了一下午,最后发现是连接串里的字符集和页面声明的重复了。

说实话,ASP这技术老掉牙了,微软自己都放弃了,转向ASP.NET。但架不住存量系统还在跑,尤其那些政府网站、企业内部系统,十多年前用ASP写的,现在还在维护。你翻开那些老代码,conn.asp文件里往往只有几行,但就是这几行,承载着整个系统的数据命脉。改一个字符,全站瘫痪;动一下路径,数据全丢。

最后说个实用技巧:把连接字符串放在单独的config文件里,别直接写死在每个页面。这样要换数据库服务器,只改一个地方。我见过最惨的案例,某公司网站50多个ASP文件,每个文件顶部都硬编码了连接字符串,后来数据库密码一改,他们花了两个通宵一个个文件替换。何必呢?

数据库连接这事,看着简单,实则全是细节。你写对了,用户无感知;写错了,白屏报错,用户骂娘。老张后来学乖了,把conn.asp里的路径改成了Server.MapPath,又给文件夹加了IUSR权限,再没出过问题。他跟我说:“早知道这玩意这么讲究,当初就学PHP了。”——但说归说,活儿还得干。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap