Как я могу создать базу данных программно и какую минимальную информацию мне нужно сделать?
Пожалуйста, нет "API-интерфейс API-интерфейса SQL Server".
Как я могу создать базу данных программно и какую минимальную информацию мне нужно сделать?
Пожалуйста, нет "API-интерфейс API-интерфейса SQL Server".
Create database 'Databasename'
Вы можете использовать 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.
Из создателей:
// 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;
}
Даже если выполнение не выполняется, попробуйте еще раз. Возможно, файлы db были созданы.
Вам нужно открыть соединение с сервером, то есть вам нужно имя сервера и экземпляра.
Вам также нужны правильные права доступа для создания базы данных, поэтому вам может потребоваться некоторое имя пользователя и пароль в зависимости от настроек проверки подлинности на сервере.
Из имени сервера и информации аутентификации вы можете построить строку подключения и открыть соединение.
Затем вы можете использовать команду CREATE DATABASE
SQL (см. здесь, в MSDN). Единственный необходимый параметр для этой команды - это имя базы данных.
Вам нужна информация о подключении: сервер, возможно, экземпляр, пользователь, имеющий права на создание базы данных на этом сервере/экземпляре и соответствующий пароль. Затем вы можете использовать SMO для создания базы данных. Вот небольшой пример PowerShell, который вы можете очень легко "перевести" на С#, например:
[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()
Предполагая, что у вас есть права отпустить инструкцию CREATE DATABASE, вы можете сделать это, как и любой другой запрос.
Я должен подчеркнуть, что для того, чтобы сделать это, требуются довольно высокие привилегии на сервере, и это будет ограничено администраторами баз данных в QA и производственных средах.
По этой причине я должен убедиться, что ваше соединение использует Windows Integrated Security. Таким образом, когда соответствующий DBA запускает ваше приложение, приложение будет функционировать в соответствии с запросом.
Как только вы создали свою базу данных, вам также необходимо запустить T-SQL для создания логинов и создания пользователей. Я считаю очевидным, что инструкции CREATE TABLE/VIEW понадобятся.