2012-01-26 93 views

回答

4
Create database 'Databasename' 
+3

當然這個工作很愚蠢,我只是用一個不存在/虛構的連接字符串來創建數據庫:P – Pascal

20

您可以使用SQL Server Management Object API(請參閱Task 「creating, altering and removing databases」):關於如何開始

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

的信息here。在SQL Server安裝期間,您需要安裝客戶端SDK,SMO程序集位於C:\ Program Files \ Microsoft SQL Server \ 100 \ SDK \ Assemblies

或者如果您不想依賴這些程序集,也可以簡單地運行使用ADO.Net(如see this question)DDL語句:

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

顯然,你需要一個正確的連接字符串:被稱爲SQL Server實例,並用CREATE DATABASE權限的用戶。

+0

我這樣做了但我登錄失敗。我應該選擇什麼用戶? – Pascal

+1

您應該使用具有正確權限的用戶。您可以通過使用SQL Management Studio連接相同的憑據來測試這一點,並手動創建數據庫。 – jeroenh

+0

它也有助於閱讀文檔。這是一個初級問題(登錄失敗)。至少試着理解你使用的軟件。 – TomTom

0

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

您還需要正確的訪問權限才能創建數據庫,因此您可能需要某些用戶名和密碼,具體取決於服務器上的身份驗證設置。

從服務器名稱和認證信息可以構造一個連接字符串並打開一個連接。

然後您可以使用CREATE DATABASE SQL命令(請參閱here on MSDN)。該命令唯一需要的參數是數據庫名稱

0

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

假設你要火了一個CREATE DATABASE語句,你可以這樣做,就像任何其他查詢的權利。

我應該強調,能夠這樣做需要服務器上相當高的權限,並且這僅限於QA和生產環境中的DBA。

因此,我會確保您的連接使用Windows集成安全性。這樣,當適當的DBA運行你的應用程序時,應用程序將按要求運行。

一旦你創建了你的數據庫,你還需要關閉T-SQL來創建登錄和創建用戶。我很明顯地需要CREATE TABLE/VIEW語句。

5

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; 
} 

即使在執行失敗的情況下,再試一次。數據庫文件可能已經創建。

相關問題