ASP.NET 无法读取网络文件夹中的 Access DB

Posted

技术标签:

【中文标题】ASP.NET 无法读取网络文件夹中的 Access DB【英文标题】:Access DB in network folder cannot be read by ASP.NET 【发布时间】:2013-03-04 17:38:09 【问题描述】:

我有一个 ASP.NET 页面,它需要将一些数据推送到一个使用 Access 2003 数据库作为后端的旧程序。我已将连接字符串全部设置为执行此操作(成功到数据库的本地副本)但是当我尝试从其网络共享位置上的数据库读取时,我收到以下错误:

无法读取记录; 'tblDevice' 没有读取权限。

数据库上没有密码或任何安全措施,所以我很确定这与网络有关。我不知道有任何方法可以在connection string 中包含网络登录名/密码。我认为这将需要将某个用户添加到文件夹中。但是,我不确定哪个用户需要对该文件夹的权限才能使其工作(来自 Visual Studio 和 IIS)。任何人都遇到过此类错误或知道需要向哪些“用户”授予对该文件夹的权限?


我的代码供参考:

访问连接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\srv.local\SHAREDOCS\data.mdb;
    User Id=admin;Password=;

选择代码

public static DataTable GetDevices(string serialNum)

    var conn = new OleDbConnection();
    var builder = new OleDbConnectionStringBuilder();
    builder.ConnectionString = ConfigurationManager.ConnectionStrings["development"].ToString();
    conn = builder.ConnectionString;

    var sqlString = "SELECT DeviceID, SN FROM tblDevice WHERE Active=True AND SN=@serialNum ORDER BY SN, DeviceID; "

    using (var cmd = new OleDbCommand(sqlString, conn))
    
        cmd.Parameters.AddWithValue("@serialNum", serialNum);
        var ds = new DataSet();
        var da = new OleDbDataAdapter(cmd);

        da.Fill(ds);

        return ds.Tables[0];
    

【问题讨论】:

看看***.com/questions/1937703/…。即 strDdl = "GRANT SELECT ON MSysObjects TO Admin;" CurrentProject.Connection.Execute strDdl @Syn123 这给了我一个错误,即使我尝试在本地副本上执行此操作:You do not have the necessary permissions to use the '' object. Have your system administrator or the person who created this object establish the appropriate permissions for you. 想法如何解决这个问题?也许是因为我的是 MDB 而那个问题是 ACCDB? 【参考方案1】:

终于想通了,这与我的预期相差甚远。出于某种奇怪的原因,数据库对各种表的权限存在随机差异。 (有些拥有完全访问权限,有些没有,有些混合......根据我对程序工作方式的了解,没有押韵或理由。)为了获得权限,我必须去这里 (访问 2010 但 2003 MDB 文件):

File -> Info -> Users and Permissions -> User and Group Permissions...

这为我提供了以下选项:

我所要做的就是检查每个对象的适当权限,现在它可以工作了。

【讨论】:

【参考方案2】:

检查运行应用程序池的服务帐户是否具有数据库权限。如果您的服务帐户在没有权限下运行,那么您很可能会遇到这样的问题。

【讨论】:

现在我仍在尝试从 Visual Studio 调试中访问它。我认为没有与之关联的服务帐户。你知道它在运行什么吗? 什么版本的 .net 框架?我猜它是在本地服务帐户下运行的。类似计算机名\ASPNET。 框架版本 = .net 4.0。我如何知道我的机器上正在运行哪些服务帐户?

以上是关于ASP.NET 无法读取网络文件夹中的 Access DB的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET访问网络映射盘&实现文件上传读取功能

为啥 Asp.net Core 无法读取 Ajax 参数?

asp.net mvc中如何读取上传的doc文件中的数据(含有中文字符)

从 ASP.NET 中的 Oracle DB 函数读取数据表

无法通过 *** 以编程方式访问网络路径

读取解决方案数据文件 ASP.Net Core