我有一个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];
}
}
答案 0 :(得分:1)
最后想出来了,并没有接近我的预期。由于某些奇怪的原因,数据库在各种表上的权限存在随机差异。 (有些人完全访问,有些没有,有些混合...没有押韵或理由来自我对程序工作方式的了解。)要获得权限,我必须去这里(Access 2010但2003年MDB文件):
File -> Info -> Users and Permissions -> User and Group Permissions...
这给了我以下选项:
我所要做的就是检查每个对象的相应权限,现在它可以正常工作。
答案 1 :(得分:0)
检查运行应用程序池的服务帐户是否具有数据库权限。如果您的服务帐户在没有权限的情况下运行,那么您很可能遇到这样的问题。