Necesita ayuda con la conexión de la clase Microsoft.SqlServer.Management.Smo Transfer
Estoy intentando copiar todo (datos, índices, activadores, procedimientos almacenados). De una base de datos a otra en C #.
Aquí está mi código:
SqlConnection connection = new SqlConnection(ConnectionString);
Server myServer = new Server(new ServerConnection(connection));
Database db = myServer.Databases[this._myDB];
if (myServer.Databases[this._newDB] != null)
myServer.Databases[this._newDB].Drop();
Database newdb = new Database(myServer, this._newDB);
newdb.Create();
Transfer transfer = new Transfer(db);
transfer.CopyAllSchemas = false;
transfer.CopyAllStoredProcedures = true;
transfer.CopyAllTables = true;
transfer.CopyAllDatabaseTriggers = true;
transfer.CopyAllObjects = true;
transfer.CopyAllUsers = true;
transfer.Options.WithDependencies = true;
transfer.DestinationDatabase = newdb.Name;
transfer.DestinationServer = myServer.Name;
transfer.DestinationLoginSecure = false;
transfer.DestinationLogin = user;
transfer.DestinationPassword = pwd;
transfer.CopySchema = false;
transfer.CopyData = true;
transfer.Options.DriAll = true;
transfer.Options.Triggers = true;
transfer.Options.WithDependencies = true;
transfer.Options.ContinueScriptingOnError = true;
transfer.TransferData();
Obtuve el siguiente error:
errorCode = -1071636471 description = Código de error SSIS DTS_E_OLEDBERROR. Se ha producido un error OLE DB. Código de error: 0x80004005.
Un registro OLE DB está disponible. Fuente: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 Descripción: "Error de inicio de sesión para el usuario 'DOMINIO \ usuario'.".
Un registro OLE DB está disponible. Fuente: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 Descripción: "No se puede abrir la base de datos" myDB (reemplazando el nombre, pero es correcto) "solicitado por el inicio de sesión. El inicio de sesión falló".
helpFile = helpContext = 0 idofInterfaceWithError = {5BC870EB-BBA5-4B9D-A6E3-58C6D0051F14}
Lo más cerca que he estado de lograrlo con una solución es haciendo:
script = transfer.ScriptTransfer();
foreach (string s in script)
{
//run a sqlcommand for s
}
Pero esto no obtiene los datos.
Le he dado al usuario todos los permisos que puedo imaginar, tanto para SQL Server como para la propia base de datos.