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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta