1、asp + Access 常见的数据库访问失败问题 Microsoft JET Database Engine 错误 '80004005' 解决办法
打开 FileMonitor 这个监控软件,因为默认情况下它跟踪的信息太多,造成查错如同大海捞针。
这里有个技巧就是先打开监视,然后选择你不需要监控的那些进程,或者一个目录。
点菜单里的: Edit -> Exclude Process 或 Edit -> Exclude Path 排除掉不需要监控的内容。
然后就会发现产生的信息大大减少了。
清空输出,重新开始监控,刷一下网页,再停止监控。很快看到一个信息:

115 15:59:40 DLLHOST.EXE:2804 CREATE C:\WINNT\TEMP\JET5EA6.tmp ACCESS DENIED CR\IUSR_CR 

可见是因为 C:\winnt\temp 目录没有对 CR\IUSER_CR 账户开放权限,导致没法创建临时文件(奇怪的是 CR\USER_CR 这个账号访问 Access 的时候需要生成临时文件)。

找到这个目录,设置一下权限。然后刷新网页就会发现好了。
当然具体情况下目录名可能不一定就是这个,但是查错方法就是这样的了,一般都可以解决。




最近这个项目中用到是ACCESS的数据库,开始没有使用密码进行连接:

String connectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
connectionString 
+= @"c:\data\db\db.mdb";
OleDbConnection con 
= new OleDbConnection(connectionString);
con.Open();


是没有任何问题。

为了要使数据库安全一点,不能被用户直接打开编辑,所以想到给Access数据库设置个密码:从菜单“工具”->"安全"->"设置数据库密码",这样设置后就不能正常访问这个数据库了,在连接字符串中加上User ID与Password字段还是不行。最后在"工具"->"安全"->"用户与组的账户"设置好密码,直接不用更改连接字符串就可以连接了。这样处理后,用户打开时提示需要输入密码,也就达到了保护Access库的目的。

转:http://rchen.cnblogs.com/archive/2005/09/19/239785.html


3、  NTFS权限问题
      磁盘分区为NTFS时,只能从access数据库中读取数据,添加修改和删除都出现错误。需要设置access数据库的访问权限,在文件夹的属性中的安全性里添加asp.net帐户,并为其添加写入修改权限。改过之后OK了


4、Access数据库在asp.net程序中相对路径的解决方法

好多朋友被ACCESS数据库在.net程序中相对路径的问题困扰,搞得每次移动程序都要去修改web.config
中数据库连接字符串的数据库路径。好多人的web.config中的写法如下: 

<appSettings>
<add key="OLEDBCONNECTIONSTRING" value="Provider=Microsoft.Jet.OLEDB.4.0;Data

Source=E:\web\App_Data\Data.mdb)"></add>
</appSettings>


程序中这样写: 

MyConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]);//注释一下:VS2005和VS2003中的ConfigurationSettings写法不一样,具体区别自己查吧

这样程序运行时经常提示诸如以下的错误:
'C:\WINDOWS\system32\~\App_Data\Data.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 Data Source=~\App_Data\Data.mdb
就算用绝对路径正确,那么移植程序时还要去修改web.config,所以比较麻烦。

也有在web.config中使用象ASP那样的Server.MapPath取数据库路径的,但web.config不认识Server.MapPath,此方法也行不通。

后来通过摸索、参考其它程序,总结出如下方法,可以方便的移植程序路径而不必再去修改ACCESS数据库路径。

我在web.config中的写法如下:

<appSettings>
<add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source="/>
<add key="dbPath" value="~/App_Data/mydata.mdb"/>
</appSettings>
程序中的数据访问类中我把"SQLConnString"和"dbPath"取出来连接成一个字符串"CONN_STRING_NON_DTC"
public static readonly string CONN_STRING_NON_DTC = System.Configuration.ConfigurationManager.AppSettings["SQLConnString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbPath"]) + ";";
这是VS2005中的写法

我把CONN_STRING_NON_DTC定义成static readonly是为了使用方便。
好了,这样就可以随便移植你的程序而不用关心数据库的路径了,一劳永逸啊^_^,适合我这样的懒人!


 

posted on 2007-08-16 08:53  Dragon-China  阅读(1749)  评论(0编辑  收藏  举报