2012-01-26 32 views

Respuesta

4
Create database 'Databasename' 
+3

estúpido, por supuesto, esto funciona, acabo de utilizar una cadena de conexión no existente/ficticia para crear el archivo db: P – Pascal

20

Usted puede utilizar el SQL Server Management Object API (ver tarea "creating, altering and removing databases"):

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

información sobre la manera de empezar es here. Durante la instalación del servidor SQL, debe instalar el SDK del cliente, los ensamblados de SMO se encuentran en C: \ Archivos de programa \ Microsoft SQL Server \ 100 \ SDK \ Assemblies

O, si no desea la dependencia de estos ensamblajes, también puede simplemente ejecutar sentencias DDL utilizando ADO.Net (por ejemplo see this question):

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

Obviamente se necesita una cadena de conexión correcta: instancia del servidor SQL conocido y un usuario con permiso CREATE DATABASE.

+0

Lo hice pero me falló el inicio de sesión. ¿Qué usuario debería elegir? – Pascal

+1

Debe usar un usuario con los permisos correctos. Puede probar esto conectándose con las mismas credenciales a través de SQL Management Studio y crear la base de datos manualmente. – jeroenh

+0

También ayuda a leer la documentación. Este es un problema de nivel junior (inicio de sesión fallido). Al menos intenta comprender el software con el que trabajas. – TomTom

0

Debe abrir una conexión al servidor, es decir, necesita un servidor y nombre de instancia.

También necesita los derechos de acceso adecuados para crear una base de datos, por lo que puede necesitar algún nombre de usuario y contraseña dependiendo de la configuración de autenticación en el servidor.

Desde el nombre del servidor y la información de autenticación puede construir una cadena de conexión y abrir una conexión.

Luego puede usar el comando SQL CREATE DATABASE (consulte here on MSDN). El único parámetro necesario para este comando es una base de datos nombre.

0

Necesita información de conexión: servidor, posiblemente instancia, un usuario que tiene derechos de creación de bases de datos en ese servidor/instancia y la contraseña correspondiente. Luego puede usar SMO para crear la base de datos. Este es un pequeño ejemplo de PowerShell que puede muy fácilmente "traducir" a C#, por ejemplo:

[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

Asumiendo que tiene los derechos para disparar una instrucción CREATE DATABASE puede hacerlo como lo haría cualquier otra consulta.

Debo recalcar que poder hacerlo requiere privilegios bastante altos en el servidor y esto estaría restringido a los DBA en los entornos de QA y Producción.

Por esa razón, me aseguraré de que su conexión utilice Windows Integrated Security. De esta forma, cuando el DBA apropiado ejecute su aplicación, la aplicación funcionará según lo solicitado.

Una vez que haya creado su base de datos, también deberá desconectar el T-SQL para crear inicios de sesión y crear usuarios. Considero obvio que se necesitarán declaraciones CREATE TABLE/VIEW.

5

Desde el 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(); 
    } 
} 

crear en ubicación predeterminada con la configuración predeterminada, simplemente:

static string GetDbCreationQuery() 
{ 
    // your db name 
    string dbName = "MyDatabase"; 

    // db creation query 
    string query = "CREATE DATABASE " + dbName + ";"; 

    return query; 
} 

O, para crear en un lugar específico:

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

Incluso en caso de que la ejecución falle, inténtelo de nuevo. Es posible que se hayan creado los archivos db.

Cuestiones relacionadas