Visual Studio连接字符串 - 相对文件路径?

时间:2013-07-17 14:17:52

标签: c# .net sql database visual-studio-2010

我使用visual studio 2010构建了一个数据库。在我的dataaccess文件中,我编写了我的连接字符串

@"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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

所以那里的相对路径是:

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

然而,这种方法存在一个更基本的问题。这只适用于开发。部署系统时,您上面没有Database文件夹的三个目录,它实际上是一个子目录。

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

Database\ ...

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

答案 1 :(得分: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>

其中|DataDirectory|指向App_Data文件夹。

然后你可以这样访问它:

using System.Configuration;
...
string conStr = ConfigurationManager.ConnectionStrings["PersonDBCS"].ConnectionString