web-dev-qa-db-ja.com

SQL Serverでプログラムによるデータベースの作成

プログラムでデータベースを作成するにはどうすればよいですか?これを行うために必要な最低限の情報は何ですか?

お願い「SQL Server管理オブジェクトAPI」の提案はありません。

13
Pascal
Create database 'Databasename'
4
Glenn

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権限を持つユーザー。

25
jeroenh

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ファイルが作成されている可能性があります。

6
nawfal

他のクエリと同じように、CREATE DATABASEステートメントを起動する権限があると仮定します。

そのためには、サーバーに対する非常に高い権限が必要であり、これはQAおよび実稼働環境のDBAに限定されることを強調しておきます。

そのため、接続にWindows統合セキュリティが使用されていることを確認します。このようにして、適切なDBAがアプリケーションを実行すると、アプリは要求どおりに機能します。

データベースを作成したら、T-SQLを起動してログインを作成し、ユーザーを作成する必要もあります。 CREATE TABLE/VIEWステートメントが必要になることは明らかです。

0
Dave Poole

サーバーへの接続を開く必要があります。つまり、サーバーとインスタンス名が必要です。

また、データベースを作成するには適切なアクセス権が必要なので、サーバーの認証設定によっては、ユーザー名とパスワードが必要になる場合があります。

サーバー名と認証情報から、接続文字列を作成して接続を開くことができます。

次に、CREATE DATABASE SQLコマンド( ここではMSDNを参照 を参照)。このコマンドに必要なパラメータは、データベースnameだけです。

0
MartinStettner

接続情報が必要です。サーバー、場合によってはインスタンス、そのサーバー/インスタンスに対するデータベース作成権限を持つユーザー、および対応するパスワード。その後、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()
0
David Brabant