簡體   English   中英

在SQL Server中以編程方式創建數據庫

[英]Creating a database programmatically in SQL Server

如何以編程方式創建數據庫,我需要做的最低限度的信息是什么?

沒有“ SQL Server管理對象API”的建議。

您可以使用SQL Server管理對象API (請參閱任務“ 創建,更改和刪除數據庫 ”):

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

有關如何入門的信息在這里 在安裝SQL Server的過程中,您需要安裝客戶端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權限的用戶。

來自創作者

// 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 'Databasename'

您需要打開與服務器的連接,即您需要服務器和實例名稱。

您還需要適當的訪問權限才能創建數據庫,因此根據服務器上的身份驗證設置,可能需要一些用戶名和密碼。

根據服務器名稱和身份驗證信息,您可以構造一個連接字符串並打開一個連接。

然后,您可以使用CREATE DATABASE SQL命令(請參見MSDN上的此處 )。 該命令唯一需要的參數是數據庫名稱

您需要連接信息:服務器(可能是實例),在該服務器/實例上具有創建數據庫權限的用戶以及相應的密碼。 然后,您可以使用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()

假設您有權觸發CREATE DATABASE語句,則可以執行此操作,就像執行其他任何查詢一樣。

我應該強調,要做到這一點,需要在服務器上具有很高的特權,而這將僅限於QA和生產環境中的DBA。

因此,我將確保您的連接使用Windows Integrated Security。 這樣,當適當的DBA運行您的應用程序時,該應用程序將按要求運行。

創建數據庫后,還需要啟動T-SQL來創建登錄名和創建用戶。 我認為顯然需要CREATE TABLE / VIEW語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM