为什么我得到“数据库已经存在”;当我使用'AttachDbFileName"当我把解移到另一个目录时

本文关键字:quot AttachDbFileName 另一个 数据库 为什么 存在 | 更新日期: 2023-09-27 18:09:59

我有一个使用数据库TopScores.mdf的应用程序JigSaw,它不包括在项目中。我想做的是让应用程序在应用程序的文件夹中找到数据库。因此,例如,如果我将.exe文件和数据库文件从调试文件夹移动到桌面,应用程序应该使用桌面数据库,而不是在调试文件夹中搜索它。

如果我让它们在调试文件夹中没有问题,并且与数据库的连接已经建立,但是当我把它们放在桌面上时,我得到这个:

应用程序中发生了未处理的异常。如果单击Continue,应用程序将忽略此错误并尝试继续。数据库D:' programming 'Projects Visual Studio 2010'JigSaw'JigSaw'bin'Debug'TopScores。Mdf '已经存在。请选择不同的数据库名称。无法附加文件"C:'Users'Addy'Desktop'Jigsaw'TopScores"。mdf' as数据库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);

对不起,我的英语不好

为什么我得到“数据库已经存在”;当我使用'AttachDbFileName"当我把解移到另一个目录时

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

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

从"Database=TopScores "更改连接字符串中的设置。mdf"到不同的东西,说:"Database=TopScores_brand_new_connection"不要在任何文件/数据库服务器中创建/删除/重命名文件。只在连接字符串中执行此操作。不要添加点,扩展等

重命名我们的。mdf文件…如。从MNGMT。mdf到M_1(你想要的东西)更改您的联系方式…希望这对你有帮助。在我的情况下,它是正确执行在其他PC以及在我的PC ..把你的。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";