プログラムでデータベースを作成するにはどうすればよいですか?これを行うために必要な最低限の情報は何ですか?
お願い「SQL Server管理オブジェクトAPI」の提案はありません。
Create database 'Databasename'
SQL Server管理オブジェクトAPI を使用することもできます(タスク " データベースの作成、変更、削除 "を参照):
var srv = new Server();
var db = new Database(srv, "mydb");
db.Create();
開始方法に関する情報は ここ です。 SQLサーバーのインストール中にクライアントSDKをインストールする必要があります。SMOアセンブリはC:\ Program Files\Microsoft SQL Server\100\SDK\Assembliesにあります
または、これらのアセンブリへの依存関係が不要な場合は、ADO.Netを使用してDDLステートメントを実行することもできます(例 この質問を参照 ):
using (var connection = new SqlConnection(myConnectionString))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = "CREATE DATABASE mydb";
command.ExecuteNonQuery();
}
明らかに、正しい接続文字列が必要です。既知のSQLサーバーインスタンスと、CREATE DATABASE権限を持つユーザー。
creators から:
// 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ステートメントを起動する権限があると仮定します。
そのためには、サーバーに対する非常に高い権限が必要であり、これはQAおよび実稼働環境のDBAに限定されることを強調しておきます。
そのため、接続にWindows統合セキュリティが使用されていることを確認します。このようにして、適切なDBAがアプリケーションを実行すると、アプリは要求どおりに機能します。
データベースを作成したら、T-SQLを起動してログインを作成し、ユーザーを作成する必要もあります。 CREATE TABLE/VIEWステートメントが必要になることは明らかです。
サーバーへの接続を開く必要があります。つまり、サーバーとインスタンス名が必要です。
また、データベースを作成するには適切なアクセス権が必要なので、サーバーの認証設定によっては、ユーザー名とパスワードが必要になる場合があります。
サーバー名と認証情報から、接続文字列を作成して接続を開くことができます。
次に、CREATE DATABASE
SQLコマンド( ここではMSDNを参照 を参照)。このコマンドに必要なパラメータは、データベースnameだけです。
接続情報が必要です。サーバー、場合によってはインスタンス、そのサーバー/インスタンスに対するデータベース作成権限を持つユーザー、および対応するパスワード。その後、SMOを使用してデータベースを作成できます。次に示すのは、C#に非常に簡単に「変換」できる小さな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()