我使用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通常将* .. *识别为目录向上命令。相对文件路径是否不适用于连接字符串?
答案 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