0

我在访问位于远程服务器上的数据库时遇到问题。

我有一个试图连接到数据库的 ASP.NET 2.0 网页。
该数据库是通过一个虚拟文件夹(我在 IIS 中设置的)访问的。
虚拟文件夹指向包含数据库的远程共享。

虚拟文件夹(在 web 应用程序根目录中)通过 UNC 路径指向远程服务器上的共享:

\\databaseServerName\databaseFolder$\ 

虚拟文件夹的“读取”和“浏览”权限设置为“真”。

我将连接字符串存储在 web.config 的“appSettings”部分:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=http://webAppServerName/virtualFolderName/databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

连接对象在我的 .aspx 页面上声明:

Dim objConnVirtual As New OleDbConnection(ConfigurationManager.AppSettings("conStrVirtual"))

这是尝试使用连接对象的代码:

Public Sub Test()
    If objConnVirtual.State <> ConnectionState.Open Then
        objConnVirtual.Open()
    End If
    Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM TableName", objConnVirtual)
    objDR = cmd.ExecuteReader()
    If objDR.Read() Then
        response.write("Shazaam! Data shows up here")
    End If
    objDR.Close()
    objConnVirtual.Close()
End Sub

当我运行上面的代码时,我收到以下错误(在代码的这一行'objConnVirtual.Open()':
异常详细信息:System.Data.OleDb.OleDbException:不是有效的文件名。

我检查了数据库名称并且它是正确的(甚至复制/粘贴它以确保)

如果我将连接字符串的“数据源”部分放入浏览器的地址栏中,我可以成功地看到远程服务器上共享的内容。

不确定这是权限问题还是代码问题。
我已经用谷歌搜索了这个废话,但无法找到解决方案。

任何帮助深表感谢。

4

5 回答 5

1

访问远程 Access MDB 数据库时,您必须指定 UNC 路径,如 \\remoteMachine\Share\test.mdb。

确保您的应用程序池身份具有连接到远程共享的正确权限。默认情况下,在 IIS 6 上,您使用的是网络服务帐户,默认情况下不允许访问远程共享。

最好的方法是让 AppPool 与专门的服务用户一起运行。

于 2008-12-04T06:25:24.610 回答
1

当您的 Web 应用程序尝试读取 db 文件时,您的服务器上使用的帐户是什么?无论此用户帐户是什么,它都需要具有读取该文件夹/文件的权限。在 IIS6 中,您可以将虚拟文件夹配置为使用任何用户帐户...在目录安全选项卡上,身份验证和访问控制下有一个编辑按钮。

您的错误消息似乎只是一般错误消息,而权限问题是您的真正问题。

于 2008-12-04T17:56:46.120 回答
0

确保两台服务器具有相互内部访问权限,并在连接字符串中指定 db 服务器的 ip 和端口。

于 2008-12-04T06:20:52.513 回答
0

更新

我还应该提到,如果我在 web.config 的“appSettings”部分中声明连接字符串,它可以在我的机器上运行(但不是一次加载到生产框),如下所示:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=\\databaseServerName\databaseFolder$\databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

这使我认为需要使用本地 IUSER 帐户以外的域凭据可能是个问题。

于 2008-12-04T06:27:12.360 回答
0

更新

首先,感谢所有提交答案的人。

然而,我们最终没有使用“通过虚拟文件夹连接到远程数据库”方法,因为让它工作所需的权限的复杂性给我们带来了比其价值更多的问题。我们将 UNC 路径放回连接字符串中,这可能不是最好的方法,但对我们有用。

于 2008-12-05T05:17:58.910 回答