【问题标题】:Database already exist. Choose a Different Name using CreateDatabase()数据库已经存在。使用 CreateDatabase() 选择不同的名称
【发布时间】:2011-10-15 02:43:23
【问题描述】:

我遇到了一个问题,同时也学到了一些东西....

我从现有的服务器数据库创建了一个 DBML。

我想从 DBML 创建本地数据库(一个 .mdf 文件)。我创建了数据库 using DataContext.CreateDatabase("C:\xxxx.mdf")

然后我决定删除它(手动,这显然是一件坏事),因为当我尝试重新创建具有相同名称的数据库时(即使文件已被删除),我收到错误 Database already exists。使用 CreateDatabase() 选择不同的名称

我尝试查看注册表,但没有运气...我尝试在整个硬盘驱动器中搜索文件...没有运气。

谷歌搜索后,我发现你删除了一个用CreateDatabase()DeleteDatabase()...创建的数据库。然后你可以重新创建数据库。

问题是,现在我仍然无法重新创建旧数据库,因为系统认为该名称已经存在。

有没有办法摆脱“不存在”的旧数据库文件的残余

【问题讨论】:

  • 当您手动删除它时,您是否同时删除了 mdf 和 ldf?另外,现在调用 DeleteDatabase() 时会出现什么错误?
  • 当我尝试 DeleteDatabase() 时,我得到这个:System.Data.SqlClient.SqlException: 尝试为文件 C:\xxxx.mdf 附加自动命名的数据库失败。存在同名数据库,或指定文件无法打开,或位于 UNC 共享上..

标签: c# linq mdf


【解决方案1】:

您需要在 Visual Studio 中通过server explorer 打开master 数据库(添加新连接+ 选择master 数据库)然后添加New query,输入Drop Database xxxx 并执行它。你也可以使用Sql Server Management Studio.

【讨论】:

  • 我也遇到了同样的问题。是否可以以编程方式执行您的建议?
  • 如果有人想知道同样的事情,是的,您可以通过编程方式完成此操作。只需在代码中连接到数据库,然后发送相应的 SQL 语句以执行 (drop database xxxx)。
【解决方案2】:

解决方案(通过here)是使用SSEUtil 分离现有数据库:

try
{
    // open a connection to the database for test
}
catch (SystemException ex) // Change exception type based on your underlying data provider
{
    if (ex.Message.ToLower().Contains("already exists. choose a different database name"))
    {
        var match = Regex.Match(ex.Message, "database '(.*)' already exists.", 
           RegexOptions.IgnoreCase);

        if (match.Success)
        {
            String dbFileName = match.Groups[1].Value;
            Process p = new Process();
            p.StartInfo.UseShellExecute = true;
            p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            p.StartInfo.FileName = String.Format("{0}/Tools/SSEUtil.exe", 
              Environment.CurrentDirectory);
            p.StartInfo.WorkingDirectory = Environment.CurrentDirectory;
            p.StartInfo.Arguments = String.Format("-d \"{0}\"", dbFileName);

            p.Start();
        }
    }
}

【讨论】:

  • +1 我在使用 Linq to SQL 类以编程方式部署 SQL Server 数据库时遇到了这个问题。不确定为什么在应用程序存在后数据库仍然连接,但是这个工具设法分离数据库。如果有人知道如何首先防止这个问题,从而消除对这个解决方案的需求,那就太好了。顺便感谢您的解决方案。
【解决方案3】:

这里有一个快速修复 localDB 混乱的方法。只需在 SQL Mgmt 中连接到 (localdb)\MSSQLLocalDB。工作室/Visual Studio。

然后删除违规者,勾选“关闭现有连接”

【讨论】:

    【解决方案4】:

    我实际上也遇到了同样的问题。之前我删了 (剪切)mysqlserver2012中的数据库并将其复制到我的应用程序文件夹中。在我制作我的应用程序后,我遇到了这个错误,并通过删除我的连接字符串的Initial Catalog 部分来解决它。

    您的最终连接字符串应如下所示:

    Data Source=<your server name>;AttachDbFileName=database path\databaseName.mdf;Integrated Security=True" + ";User Instance=True" + ";Context Connection=False;

    【讨论】:

      猜你喜欢
      • 2016-11-18
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2021-10-02
      相关资源
      最近更新 更多