Benötigen Sie Hilfe bei der Verbindung mit der Microsoft.SqlServer.Management.Smo Transfer-Klasse
Ich versuche alles zu kopieren (Daten, Indizes, Trigger, gespeicherte Prozeduren). Von einer Datenbank zur nächsten in C #.
Hier ist mein Code:
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();
Ich erhalte folgenden Fehler:
errorCode = -1071636471 description = SSIS-Fehlercode DTS_E_OLEDBERROR. Ein OLE DB-Fehler ist aufgetreten. Fehlercode: 0x80004005.
Ein OLE DB-Datensatz ist verfügbar. Quell: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 Beschreibung: "Anmeldung für Benutzer 'DOMAIN \ user' fehlgeschlagen.".
Ein OLE DB-Datensatz ist verfügbar. Quelle: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 Beschreibung: "Die Datenbank myDB kann nicht geöffnet werden (ersetzt den Namen, ist aber korrekt)" wurde von der Anmeldung angefordert. Die Anmeldung ist fehlgeschlagen. "
helpFile = helpContext = 0 idofInterfaceWithError = {5BC870EB-BBA5-4B9D-A6E3-58C6D0051F14}
Das, was ich am ehesten mit einer Problemumgehung erreicht habe, ist Folgendes:
script = transfer.ScriptTransfer();
foreach (string s in script)
{
//run a sqlcommand for s
}
Damit werden die Daten jedoch nicht erfasst.
Ich habe dem Benutzer jede Erlaubnis gegeben, die mir sowohl für SQL Server als auch für die Datenbank selbst einfällt.