C# 访问MDB文件问题

whatdoyousay 2014-12-16 07:19:51
想读取某MDB文件,简单写了一个程序测试一下
事实证明是可以的



但是当我把代码搬到项目中的时候,发现了以下问题

一直提示我:Microsoft Office Access 数据库引擎无法打开文件“C:\Users\Administrator\Desktop\test.mdb”或无法向其写入数据。它已经被其他用户以独占方式打开,或者您没有查看或写入其数据的权限。

然后奇怪的事情发生了,我把该MDB文件放到了F盘,换了个路径,竟然测试就通过了。到现在都没明白为什么。
完整代码如下:

public class ReadMDB
{
public object MDBreader(RunVisitor scriptObject, object data, ArrayList argsList)
{
#region xx
string filepath = (string)argsList[0];
string passWord = (string)argsList[1];
string sqlstr = (string)argsList[2];
string tablename = (string)argsList[3];
OleDbDataAdapter myadapter;
string strcon = sqlstr;
if (passWord == "")
{
myadapter = new OleDbDataAdapter(strcon, InitialConnection(filepath));
}
else
{
myadapter = new OleDbDataAdapter(strcon, InitialConnection(filepath, passWord));
}
DataSet mydataset = new DataSet();
myadapter.Fill(mydataset, tablename);
return mydataset;
#endregion
}



public OleDbConnection InitialConnection(string filepath)
{
string constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath;
OleDbConnection connection = new OleDbConnection(constr);
return connection;
}
public OleDbConnection InitialConnection(string filepath, string password)
{

string constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Jet OLEDB:Database Password=" + password + ";";
OleDbConnection connection = new OleDbConnection(constr);
return connection;

}

大神们这是为什么



...全文
944 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-12-17
  • 打赏
  • 举报
回复
引用 6 楼 liuhuibing12 的回复:
[quote=引用 5 楼 Z65443344 的回复:] 没有权限 即使以管理员身份运行,管理员身份也不是最高权限 要么你就提高管理员的权限
那为什么我写的小程序(图一)可以,到项目中就不可以呢,同样的权限[/quote] 路径都一样?系统环境都一样?
wind_cloud2011 2014-12-17
  • 打赏
  • 举报
回复
你将数据库文件放在项目所在的目录下,试试
whatdoyousay 2014-12-17
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
没有权限 即使以管理员身份运行,管理员身份也不是最高权限 要么你就提高管理员的权限
那为什么我写的小程序(图一)可以,到项目中就不可以呢,同样的权限
於黾 2014-12-17
  • 打赏
  • 举报
回复
没有权限 即使以管理员身份运行,管理员身份也不是最高权限 要么你就提高管理员的权限
whatdoyousay 2014-12-17
  • 打赏
  • 举报
回复
引用 1 楼 SmileSkyNet 的回复:
这么简单的问题,因为你那个数据库被其它程序占用了,或是你打开了数据库没有关闭
首先想到的也是这个原因,但是我确认过了,没有打开或者其他程序占用,我只是挪了一个地方就可以了。如果被占用,应该是无法移动的吧
whatdoyousay 2014-12-17
  • 打赏
  • 举报
回复
引用 2 楼 wind_cloud2011 的回复:
是因为权限的问题,不要将数据库文件放在C盘,或桌面,不然要以管理员权限运行程序,
但是我本身就是以管理员的身份运行的啊
whatdoyousay 2014-12-17
  • 打赏
  • 举报
回复
不想了,继续做下去
whatdoyousay 2014-12-17
  • 打赏
  • 举报
回复
引用 10 楼 Z65443344 的回复:
mdb文件本来就应该放到项目bin目录下 不仅是mdb文件,你所有的配置文件,资源文件,dll,也都应该在这个目录下 否则换个环境,你有可能找不到用户桌面到底在哪一个目录下 如果你写死成C盘,那么用户有可能根本没有C盘,把操作系统放到了D盘,或者C盘是光驱,这都是有可能的
嗯,是的。这里我是用JS脚本传入路径参数的,上面的代码你可以看到,并没有写死路径
  • 打赏
  • 举报
回复
默认情况下 Jet 是以独占方式访问文件的。你 Access 打开了 mdb 文件,程序就不能打开。
於黾 2014-12-17
  • 打赏
  • 举报
回复
mdb文件本来就应该放到项目bin目录下 不仅是mdb文件,你所有的配置文件,资源文件,dll,也都应该在这个目录下 否则换个环境,你有可能找不到用户桌面到底在哪一个目录下 如果你写死成C盘,那么用户有可能根本没有C盘,把操作系统放到了D盘,或者C盘是光驱,这都是有可能的
whatdoyousay 2014-12-17
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
[quote=引用 6 楼 liuhuibing12 的回复:] [quote=引用 5 楼 Z65443344 的回复:] 没有权限 即使以管理员身份运行,管理员身份也不是最高权限 要么你就提高管理员的权限
那为什么我写的小程序(图一)可以,到项目中就不可以呢,同样的权限[/quote] 路径都一样?系统环境都一样?[/quote] 路径都一样,代码也基本一样。经过你一提醒,小程序是存储在C:\user\administrator\project 下的,而项目在F盘中的,会不会是因为小程序本身在C盘就可以读取C盘的东西。所以我把小程序移到F盘,结果一测试,依然可以。将MDB文件移动到项目bin目录下,也可以访问。
wind_cloud2011 2014-12-16
  • 打赏
  • 举报
回复
是因为权限的问题,不要将数据库文件放在C盘,或桌面,不然要以管理员权限运行程序,
SmileSkyNet 2014-12-16
  • 打赏
  • 举报
回复
这么简单的问题,因为你那个数据库被其它程序占用了,或是你打开了数据库没有关闭

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧