如何通过指向远程共享的虚拟文件夹访问数据库

时间:2008-12-04 05:26:25

标签: asp.net database virtual unc remote-server

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

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

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

\\databaseServerName\databaseFolder$\ 

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

我将连接字符串存储在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:不是有效的文件名。

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

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

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

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

确保两台服务器之间具有内部访问权限,并指定ip&amp;连接字符串中的db服务器端口。

答案 3 :(得分:0)

更新

如果我在web.config的'appSettings'部分中声明连接字符串,我还应该提到它works on my machine(但不会一次加载到生产框中):

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

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

答案 4 :(得分:0)

更新

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

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