2013-07-17 177 views
3

我已经建立了使用Visual Studio 2010中一个数据库,在我的数据访问文件,我写我的连接字符串Visual Studio连接字符串 - 相对文件路径?

@"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转移到另一台时都必须更改。我不想那样做。所以我试图改变相对文件路径的绝对文件路径(关于我的.sln文件)。我改变了我的连接字符串像这样 -

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

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

回答

5

的问题是,在运行时你的执行了:

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

所以相对路径从有:

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

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

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

Database\ ... 

并且这将在开发和生产。

+0

噢日Thnx,让我试试这个 –

+0

没有.. \符号似乎并没有工作。在解决方案中嵌套数据库文件夹也没有。嗯,我想我必须使用绝对路径总是:( –

+0

+1复制总是' – Javid

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 
+0

好吧,我使用Windows窗体,所以没有App_Data文件夹在我的解决方案。那么DataDirectory |意味着什么?调试文件夹?? –