1

我有一个应用程序 JigSaw,它使用了TopScores.mdf项目中未包含的数据库。我想要做的是让应用程序在应用程序的文件夹中找到数据库。例如,如果我移动.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);

对不起,我的英语不好 :(

4

3 回答 3

5

User Instance=true;发生这种情况是因为您在连接到它时没有利用它。您实际上是告诉 SQL Server 将数据库从您第一次加载它的目录附加到正在运行的 SQL 实例。

手动从正在运行的 SQL 实例中分离数据库,将连接字符串更改为 use User Instance=true;,从Debug文件夹中运行它,然后从 运行它Desktop,您会看到成功。

于 2013-04-18T19:04:29.013 回答
3

将连接字符串中的设置从“Database=TopScores.mdf”更改为不同的设置,例如:“Database=TopScores_brand_new_connection”不要在任何文件/数据库服务器中创建/删除/重命名文件。仅在连接字符串中执行此操作。不要添加点、扩展名等。

于 2014-03-21T00:24:19.200 回答
-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";
于 2015-03-31T05:04:55.977 回答