2012-01-26 99 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; 
} 

即使在执行失败的情况下,再试一次。数据库文件可能已经创建。

相关问题