Создать базу данных .mdf / .sdf динамически

Как я могу с & quot; кодом & quot; создать новую базу данных .mdf / .sdf?

Я пробовал это: http://support.microsoft.com/kb/307283

Все, что он делает, это сбой на ConnectionString. Поскольку у меня нет подключения к файлу, который существует до его создания, как я могу подключиться к серверу SQL Express только для создания базы данных mdf / sdf?

Я хочу иметь возможность просто подключиться к серверу и создать файл, оттуда, вероятно, будет проще создавать таблицы и тому подобное.

Какие-либо предложения?

 David Brabant07 мая 2012 г., 14:18
 user35913507 мая 2012 г., 14:18
у вас есть возможность использования SQL Server CE? у него есть эта функциональность .. как только на основе строки подключения

Ответы на вопрос(7)

Если вам нужно создать базу данных с нуля программным путем, я обычно захожу в SQL Server Management Studio и создаю ее через графический интерфейс на первом этапе. Но вместо нажатия кнопки «ОК» в правом нижнем углу я нажимаю кнопку «Сценарий» на верхней панели инструментов. Это даст мне полный сценарий sql для создания базы данных, которую я хотел бы иметь. Затем я могу изменить сценарий и изменить части, которые мне нравятся, динамически.

Убедитесь, что у вас есть правильная строка подключения.

Необходимая база данных / каталог должна быть действительной базой данных, обычно это может быть & quot; master & quot; который всегда доступен, и так как вы будете использовать мастер для создания базы данных.

Используйте строку подключения сInitialCatalog = master, Поскольку только мастер имеет доступ по умолчанию для создания базы данных.

Create .sdf database

using System.Data.SqlServerCe;
using System.IO;
  string folderPath="D:\\Compact_DB"
  string connectionString;
  string fileName =folderPath+"\\School.sdf";
  string password = "12345";

  if (File.Exists(fileName))
  {
    File.Delete(fileName);
  }

  connectionString = string.Format("DataSource=\"{0}\"; Password='{1}'",    fileName, password);
  SqlCeEngine obj_ceEngine = new SqlCeEngine(connectionString);
  obj_ceEngine.CreateDatabase();

Что касается файлов .sdf (SQL Server CE), вы можете использоватьSqlCeEngine класс для создания новой базы данных, как описано вэта статья MSDN.

Решение Вопроса
public static void CreateSqlDatabase(string filename)
{
    string databaseName = System.IO.Path.GetFileNameWithoutExtension(filename);
    using (var connection = new System.Data.SqlClient.SqlConnection(
        "Data Source=.\\sqlexpress;Initial Catalog=tempdb; Integrated Security=true;User Instance=True;"))
    {
        connection.Open();
        using (var command = connection.CreateCommand())
        {
            command.CommandText =
                String.Format("CREATE DATABASE {0} ON PRIMARY (NAME={0}, FILENAME='{1}')", databaseName, filename);
            command.ExecuteNonQuery();

            command.CommandText =
                String.Format("EXEC sp_detach_db '{0}', 'true'", databaseName);
            command.ExecuteNonQuery();
        }
    }
}

+ ИзменитьCatalog=tempdb вCatalog=master, его хорошо сработало

Образец использования:

var filename = System.IO.Path.Combine("D:\\", "testdb.mdf");
if (!System.IO.File.Exists(filename))
{
    CreateSqlDatabase(filename);
}
 25 апр. 2018 г., 14:03
Я получаю сообщения об ошибках: «System.Data.SqlClient.SqlException:» При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. & Quot; Не могли бы вы помочь мне?
 Deukalion08 мая 2012 г., 14:49
Прямо сейчас я получаю сообщения о том, что база данных уже существует, но с ней не связано ни одного файла. Не является ли база данных, таблицы и тому подобное содержащиеся в «MDF»? файл? Поскольку нет ни одного, как может быть база данных без файла?
 17 нояб. 2015 г., 09:48
эта строка подключения работала для меня: & quot; Источник данных = (LocalDB) \\ v11.0; Начальный каталог = master; Интегрированная безопасность = true; & quot;
 Deukalion08 мая 2012 г., 14:34
Это сработало. Но позже я вообще не могу подключиться к файлу данных. SQL Connection String работает при создании файла, но при последующем подключении к нему возникает много разных ошибок. Если я использую этот метод для создания & quot; mdf & quot; файл в CurrentDirectory, как мне позже использовать его?
 09 мая 2012 г., 00:00
измените Catalog = tempdb на Catalog = master, это хорошо сработало

Я полагаю проблемаis в ConnectionString. Он должен указывать на действительный экземплярmaster дБ (как в статье, на которую вы ссылаетесь). Убедитесь, что это правильно, и это должно работать.

 Deukalion07 мая 2012 г., 19:34
Но я хочу, чтобы программа создала его с помощью кода.

Ваш ответ на вопрос