Создание базы данных программно в SQL Server - PullRequest
12 голосов
/ 26 января 2012

Как я могу создать базу данных программно и какая минимальная информация мне нужна для этого?

Пожалуйста, нет предложений "API объекта управления SQL Server".

Ответы [ 6 ]

25 голосов
/ 26 января 2012

Вы можете использовать API-интерфейс объекта управления SQL Server (см. Задачу " создание, изменение и удаление баз данных "):

 var srv = new Server();
 var db = new Database(srv, "mydb");
 db.Create();

Информация о том, какдля начала это здесь .Во время установки сервера SQL необходимо установить клиентский SDK, сборки SMO ​​находятся в C: \ Program Files \ Microsoft SQL Server \ 100 \ SDK \ Assemblies

Или, если вы не хотите зависеть от этих сборокВы также можете просто запустить операторы DDL, используя ADO.Net (например, см. этот вопрос ):

using (var connection = new SqlConnection(myConnectionString))
{
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = "CREATE DATABASE mydb";
    command.ExecuteNonQuery();
}  

Очевидно, что вам нужна правильная строка подключения: известный экземпляр сервера sql и пользователь сРазрешение CREATE DATABASE.

5 голосов
/ 22 февраля 2013

Из создателей :

// your connection string
string connectionString = "Server=(local)\\netsdk;uid=sa;pwd=;database=master";

// your query:
var query = GetDbCreationQuery();

var conn = new SqlConnection(connectionString);
var command = new SqlCommand(query, conn);

try
{
    conn.Open();
    command.ExecuteNonQuery();
    MessageBox.Show("Database is created successfully", "MyProgram", 
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    if ((conn.State == ConnectionState.Open))
    {
        conn.Close();
    }
}

Чтобы создать местоположение по умолчанию с настройками по умолчанию, просто:

static string GetDbCreationQuery()
{
    // your db name
    string dbName = "MyDatabase";

    // db creation query
    string query = "CREATE DATABASE " + dbName + ";";

    return query;
}

Или, чтобы создать его в определенном месте:

static string GetDbCreationQuery()
{
    // your db name
    string dbName = "MyDatabase";

    // path to your db files:
    // ensure that the directory exists and you have read write permission.
    string[] files = { Path.Combine(Application.StartupPath, dbName + ".mdf"), 
                       Path.Combine(Application.StartupPath, dbName + ".ldf") };

    // db creation query:
    // note that the data file and log file have different logical names
    string query = "CREATE DATABASE " + dbName +
        " ON PRIMARY" +
        " (NAME = " + dbName + "_data," +
        " FILENAME = '" + files[0] + "'," +
        " SIZE = 3MB," +
        " MAXSIZE = 10MB," +
        " FILEGROWTH = 10%)" +

        " LOG ON" +
        " (NAME = " + dbName + "_log," +
        " FILENAME = '" + files[1] + "'," +
        " SIZE = 1MB," +
        " MAXSIZE = 5MB," +
        " FILEGROWTH = 10%)" +
        ";";

    return query;
}

Даже в случае сбоя выполнения, попробуйте еще раз.Возможно, файлы БД созданы.

4 голосов
/ 26 января 2012
Create database 'Databasename'
0 голосов
/ 26 января 2012

Предполагая, что у вас есть права на запуск оператора CREATE DATABASE, вы можете сделать это так же, как и любой другой запрос.

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

По этой причине я хотел бы убедиться, что ваше соединение использует встроенную безопасность Windows. Таким образом, когда соответствующий администратор базы данных запускает ваше приложение, приложение будет работать в соответствии с запросом.

После того, как вы создали свою базу данных, вам также нужно будет запустить T-SQL для создания логинов и пользователей. Я считаю очевидным, что потребуются операторы CREATE TABLE / VIEW.

0 голосов
/ 26 января 2012

Требуется информация о соединении: сервер, возможно, экземпляр, пользователь, имеющий права на создание базы данных на этом сервере / экземпляре, и соответствующий пароль. Затем вы можете использовать SMO для создания базы данных. Вот небольшой пример PowerShell, который вы можете очень легко «перевести» на C #, например:

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null

$s = New-Object Microsoft.SqlServer.Management.Smo.Server($ServerInstance)

# Instantiate the database object and add the filegroups
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($s, $DatabaseName)
$primaryFG = New-Object Microsoft.SqlServer.Management.Smo.FileGroup($db, 'PRIMARY')
$db.FileGroups.Add($primaryFG)

# Create Data file
$syslogname = $DatabaseName + '_SysData'
$dbdsysfile = New-Object Microsoft.SqlServer.Management.Smo.DataFile($primaryFG, $syslogname)
$primaryFG.Files.Add($dbdsysfile)
$dbdsysfile.FileName = $s.MasterDBPath + '\' + $syslogname + '.mdf'
$dbdsysfile.Size = [double](5.0 * 1024.0)
$dbdsysfile.GrowthType = 'KB'
$dbdsysfile.Growth = 10000.0
$dbdsysfile.IsPrimaryFile = 'True'

# Create Log file
$loglogname = $DatabaseName + '_Log'
$dblfile = New-Object Microsoft.SqlServer.Management.Smo.LogFile($db, $loglogname)
$db.LogFiles.Add($dblfile)
$dblfile.FileName = $s.MasterDBLogPath + '\' + $loglogname + '.ldf'
$dblfile.Size = [double](10.0 * 1024.0)
$dblfile.GrowthType = 'KB'
$dblfile.Growth = 10000.0

# Create database with READ_COMMITTED_SNAPSHOT isolation level.
# Other options can be set on $db object before calling Create.
$db.IsReadCommittedSnapshotOn = $true

$db.RecoveryModel = [Microsoft.SqlServer.Management.Smo.RecoveryModel]::Simple
$db.Create()
0 голосов
/ 26 января 2012

Вам необходимо открыть соединение с сервером, т.е. вам нужен сервер и имя экземпляра.

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

Из имени сервера и информации аутентификации вы можете создать строку соединения и открыть соединение.

Затем вы можете использовать команду CREATE DATABASE SQL (см. здесь, в MSDN ). Единственный необходимый параметр для этой команды - это база данных имя .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...