3

我已经使用 Visual Studio 2010 构建了一个数据库。在我的数据访问文件中,我写了我的连接字符串

@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\SOFTWARE\Database\persondb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

如您所见,我的数据库位于

C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\Software\Database\persondb.mdf

我的解决方案是

C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\Software\Management System\Management System.sln

每次从一台电脑转移到另一台电脑时,都必须更改数据库的连接字符串。我不想那样做。所以我试图将绝对文件路径更改为相对文件路径(关于我的 .sln 文件)。我像这样更改了连接字符串-

@"Data Source=.\SQLEXPRESS;AttachDbFilename=..\Database\persondb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

但它没有用。那么我的问题是什么?windows 通常将 *..* 识别为目录向上命令。相对文件路径是否不适用于连接字符串?

4

2 回答 2

5

问题是在运行时你正在执行:

C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\Software\Management System\bin\Debug

所以从那里的相对路径是:

..\..\..\Database ...

然而,这种方法存在一个更根本的问题。这仅在开发中有效。部署系统时,你上面的文件夹不会是Database三个目录,它实际上是一个子目录。

更合适的方法可能是Database在您的解决方案中创建一个文件夹,将数据库放入其中,然后将其设置为Copy Always. 连接字符串将是:

Database\ ...

这将在开发和生产中起作用。

于 2013-07-17T14:21:50.953 回答
1

您不必编写绝对路径,您需要将数据库文件放在App_Data文件夹中并在其中添加以下连接字符串web.config

<connectionStrings>
    <add name="PersonDBCS" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\persondb.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

where|DataDirectory|指向App_Data文件夹。

然后你可以通过这种方式访问​​它:

using System.Configuration;
...
string conStr = ConfigurationManager.ConnectionStrings["PersonDBCS"].ConnectionString
于 2013-07-17T16:32:33.710 回答