在SQL Server中以编程方式创建数据库

如何以编程方式创建数据库以及执行此操作所需的最少信息是什么?

不要“SQL Server管理对象API”建议。

Create database 'Databasename' 

您可以使用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 server实例和具有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文件。

您需要打开与服务器的连接,即您需要服务器和实例名称。

您还需要适当的访问权限才能创建数据库,因此您可能需要一些用户名和密码,具体取决于服务器上的身份validation设置。

从服务器名称和身份validation信息中,您可以构造连接字符串并打开连接。

然后,您可以使用CREATE DATABASE SQL命令(请参阅MSDN上的此处 )。 此命令唯一需要的参数是数据库名称

您需要连接信息:服务器,可能是实例,在该服务器/实例上具有create database权限的用户以及相应的密码。 然后,您可以使用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语句。