Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Database already exist. Choose a Different Name using CreateDatabase()

Tags:

c#

linq

mdf

I got an issue and learned something at the same time....

I created a DBML from an existing server database.

From the DBML I wanted to create local database (an .mdf file). I created the database using DataContext.CreateDatabase("C:\xxxx.mdf") .

Then I decided to delete it (MANUALLY, which is a bad thing evidentally) because when I try to recreate the database with the same name (eventhough the files are deleted), I get the error Database already exist. Choose a Different Name using CreateDatabase()

I tried looking through the registry, no luck... I tried searching the whole hard drive for the file.. no luck.

After googling, I found that you delete a database that was created with CreateDatabase() with DeleteDatabase().... Then you can recreate the database again.

Well problem is, now I still can't recreate the old database because the system thinks the name already exists.

Is there a way to get rid of the reminents of the old databse file the "does not exist"

like image 466
DJ Burb Avatar asked Oct 15 '11 02:10

DJ Burb


2 Answers

You need to open master database via server explorer in Visual Studio (Add New Connection + Select master database) then add a New query, type Drop Database xxxx and execute it. You can also use Sql Server Management Studio.

like image 92
KV Prajapati Avatar answered Sep 28 '22 02:09

KV Prajapati


A solution (via here) is to use SSEUtil to detach the existing db:

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();
        }
    }
}
like image 27
Mohsen Afshin Avatar answered Sep 28 '22 02:09

Mohsen Afshin