这几天在做ASP.NET网站,后台数据库就用轻便的Access作数据库。我发现Access虽然相对MSSQL简单小巧,不用那么多的设置,但它也不轻松。如果你对它执行SQL语句的操作,万一表名或者字段名使用了它的关键字,那么就会抛出异常,而这些关键字在MSSQL中是很正常的。有时候这会让你苦不堪言。
Access作数据库的一个好处就是它可以随意携带而且不用像MSSQL一样还要附加和配置。但它的优势也是它的劣势,Access作为一种文件如果泄漏了它的地址则很容易就被下载下来,这样网站安全性就无从谈起。
在ASP.NET中使用Access数据库其中最让人郁闷的就是数据库地址的指定。在桌面程序中,我们只需要用System.Windows.Forms.Application.StartupPath加数据库相对地址就可以了,而在WEB程序中将是另外一种光景。当然,我们也可以System.Web.HttpContext.Current.Server.MapPath这个Web服务器上指定虚拟路径相应的物理文件路径。但这个东东在Internet信息服务里面变得会很异常。也就是说你在VS2008里面调试的或者在浏览器里面进行调试都没有问题,但到Internet信息服务里面直接浏览网站就会报错,可能这个跟Web服务器网站和虚拟路径不太一样。
一旦你的网站发布了,那么所有的代码文件将被转换为DLL直接存放在bin文件夹里,如果你的数据库存放在网站根目录下的Data文件夹下,那么你要在浏览器中可用就必须这样指定地址:System.Web.HttpContext.Current.Server.MapPath("~\Data\Data.mdb"),也就是前面加个“~”。难道说我们所要用到的网站主目录是Bin文件夹?
而无论你怎么变,在Internet信息服务里面都是运行不了的…搞笑的是在VS2008里面调试的时候却都能适用,即使你把“~”忘记了。
有谁能告诉为什么呢?我想,我应该去百度一下…