Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SmoExtended
Microsoft.SqlServer.SqlEnum
Si tenéis varias versiones de SQL Server instaladas tendréis varios componentes, es decir, si tenéis instalado el SQL Server 2005 y 2008 hay un Microsoft.SqlServer.ConnectionInfo versión 9 (2005) y uno versión 10 (2008) elegir siempre los de la misma versión.
Crear bases de datos.
Utilizaremos el siguiente código para crear bases de datos desde c#
ServerConnection conn = new ServerConnection(“localhost”);
Server server = new Server(conn);
Database newdb = new Database(server, “NUEVADB”);
newdb.Create();
conn.Disconnect();
Borrar bases de datos.
En el caso del borrado de bases de datos antes de nada deberemos eliminar los procesos asociados a la base de datos que queremos borrar con la instrucción:
server.KillAllProcesses(“NUEVADB”);
Utilizaremos el siguiente código para borrar bases de datos desde c#
ServerConnection conn = new ServerConnection(“localhost”);
Server server = new Server(conn);
// Para que libere la base de datos que queremos borrar.
server.KillAllProcesses(“NUEVADB”);
Database db = new Database(server, “NUEVADB”);
db.Refresh();
db.Drop();
conn.Disconnect();
Copiar bases de datos.
Utilizaremos el siguiente código para copiar bases de datos desde c#
ServerConnection conn = new ServerConnection(SqlServer);
Server server = new Server(conn);
Database newdb = new Database(server, NewDataBase);
newdb.Create();
Transfer transfer = new Transfer(server.Databases[SourceDataBase]);
transfer.CopyAllObjects = true;
transfer.CopyAllUsers = true;
transfer.Options.WithDependencies = true;
transfer.DestinationDatabase = newdb.Name;
transfer.DestinationServer = server.Name;
transfer.DestinationLoginSecure = true;
transfer.CopySchema = true;
transfer.CopyData = true;
transfer.Options.ContinueScriptingOnError = true;
transfer.Options.IncludeIfNotExists = true;
transfer.TransferData();
conn.Disconnect();
Con esta instrucción transfer.CopyData = true le decimos que copie también los datos, si la ponemos a false solo copiara la estructura de la tabla.
Si esta clase la vais a utilizar desde ASP.NET deberéis poner esta línea en el web.config:
<system.web>
...
<identity impersonate="true" userName="domain\user" password="password" />
...
</system.web/>
Dejo el código de la clase en c#. Acordaros de eliminar la extensión .txt para utilizarla.
SQLSMO.cs
Código completo
Y esto es todo.
Saludos
Alex.