我有一个使用数据库TopScores.mdf
的应用程序JigSaw,它不包含在项目中。我想要做的是让应用程序在应用程序的文件夹中找到数据库。因此,例如,如果我将.exe
文件和数据库文件从调试文件夹移动到桌面,则应用程序应使用桌面数据库,而不是在调试文件夹中搜索它。
如果我让他们在调试文件夹中没有问题,并且建立了与数据库的连接,但是当我把它们放在桌面上时,我得到了这个:
您的应用程序中发生了未处理的异常。如果单击“继续”,应用程序将忽略此错误并尝试继续。数据库'D:\ Programing \ Projects Visual Studio 2010 \ JigSaw \ JigSaw \ bin \ Debug \ TopScores.mdf'已经存在。选择其他数据库名称。无法将文件'C:\ Users \ Addy \ Desktop \ Jigsaw \ TopScores.mdf'附加为数据库TopScores.mdf
我的连接字符串是:
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
string connString = @"server =.\sqlexpress; Database=TopScores.mdf; trusted_connection=TRUE; AttachDbFileName= "+@appPath+@"\TopScores.mdf";
conn = new SqlConnection(connString);
抱歉我的英语不好:(
答案 0 :(得分:5)
这种情况正在发生,因为您在连接时未使用User Instance=true;
。您实际上告诉SQL Server将数据库从您首次加载它的目录中附加到正在运行的SQL实例。
从正在运行的SQL实例手动分离数据库,将连接字符串更改为使用User Instance=true;
,从Debug
文件夹运行它,然后从Desktop
运行它,并且你会看到成功。
答案 1 :(得分:3)
更改连接字符串中的设置" Database = TopScores.mdf"对于不同的东西,说:"数据库= TopScores_brand_new_connection"不要在任何文件/数据库服务器中创建/删除/重命名文件。仅在连接字符串中执行此操作。不要添加点,扩展等。
答案 2 :(得分:-1)
只需重命名.mdf文件...例如。从MNGMT.mdf到M_1(你想要的东西)。更改你的联系人字符串...希望所以它会帮助你..在我的情况下,它在其他电脑和我的电脑上正确执行..只需将你的.mdf文件复制到你的项目..
string dbPath = Path.GetDirectoryName(Application.ExecutablePath) + "\\M_1.mdf";
string myServer = Environment.MachineName;
DataTable servers = SqlDataSourceEnumerator.Instance.GetDataSources();
for (int i = 0; i < servers.Rows.Count; i++)
{
if (myServer == servers.Rows[i]["ServerName"].ToString()) ///// used to get the servers in the local machine////
{
if ((servers.Rows[i]["InstanceName"] as string) != null)
servername = (servers.Rows[i]["ServerName"] + "\\" + servers.Rows[i]["InstanceName"]);
else
servername = ""+servers.Rows[i]["ServerName"];
}
}
connetionString = "Data Source=" + servername + ";AttachDbFilename=" + dbPath + ";Integrated Security=True;Pooling=False;User Instance=True";