2009-05-19 8 views
0

J'utilise la méthode TransferData de la classe de transfert dans SQL Server SMO. J'ai l'appel s'exécutant sur Windows XP, exécutant SQL Server 2008 SP1, en essayant de transférer une table de SQL Server 2000 sur un autre serveur à la machine XP. Ils utilisent tous les deux le même nom d'utilisateur et mot de passe SQL. J'ai testé en utilisant l'assistant Import/Export et ça s'est bien passé.SQL Server SMO TransferData() continue d'échouer

L'exception est ci-dessous et le journal des événements comporte une erreur "Échec" ShellPackage "Package" d'entrée.

L'erreur d'exception indique que la propriété de la requête est vide et qu'il n'y a pas de substitution. Je présume qu'un certain DTS échoue mais je ne suis pas sûr de quoi et pourquoi. "ERREUR: errorCode = -1073548784 description = L'exécution de la requête \" \ "a échoué avec l'erreur suivante: \" L'initialiseur de type pour '' a lancé une exception. \ ". Raisons possibles de l'échec: Problèmes avec la requête, la propriété \ "ResultSet \" n'est pas définie correctement, les paramètres ne sont pas définis correctement ou la connexion n'est pas établie correctement. \ r \ n helpFile = helpContext = 0 idofInterfaceWithError = {C81DFC5A-3B22-4DA3-BD3B-10BF861A7F9C} "

Mon code:

try 
      { 
       string MasterUser = ConfigurationSettings.AppSettings["SQLUserName"]; 
       string MasterPassword = ConfigurationSettings.AppSettings["SQLPassword"]; 


       Server server = new Server(SourceServer); 
       server.ConnectionContext.LoginSecure = false; 
       server.ConnectionContext.Login = MasterUser; 
       server.ConnectionContext.Password = MasterPassword; 

       Database databaseSource = server.Databases[SourceDatabaseName]; 


       Transfer transfer = new Transfer(databaseSource); 
       transfer.CopyAllObjects = false; 
       transfer.DropDestinationObjectsFirst = false; 
       transfer.UseDestinationTransaction = true; 

       if (IsBasic) 
       { 
        transfer.CopyAllDefaults = false; 
        transfer.Options.Indexes = false; 
        transfer.Options.DriAll = false; 
        transfer.CopyAllDefaults = false; 
       } 
       else 
       { 
        transfer.CopyAllDefaults = true; 
        transfer.Options.Indexes = true; 
        transfer.Options.DriAll = true; 
        transfer.CopyAllDefaults = true; 
       } 

       transfer.Options.AnsiFile = true; 
       transfer.Options.SchemaQualify = true; 
       transfer.Options.WithDependencies = false; 
       transfer.CreateTargetDatabase = false; 
       transfer.CopySchema = true; 

       if (CopyData) 
        transfer.CopyData = true; 
       else 
        transfer.CopyData = false; 

       transfer.DestinationServer = DestinationServer; 
       transfer.DestinationDatabase = DestinationDatabaseName; 
       transfer.DestinationLoginSecure = false; 
       transfer.DestinationLogin = MasterUser; 
       transfer.DestinationPassword = MasterPassword; 


       //find the able object 
       foreach (Table table in databaseSource.Tables) 
       { 
        if (table.Name == TableName) 
        { 
         tableToTransfer = table; 
         break; 
        } 
       } 

       transfer.Options.IncludeIfNotExists = true; 
       transfer.ObjectList.Add(tableToTransfer); 
       transfer.TransferData(); 
      } 
      catch (DbException dbExp) 
      { 
       throw new FaultException(dbExp.Message); 
      } 
      catch (Exception ex) 
      { 
       throw new FaultException(ex.Message); 
      } 

Répondre

0

le service d'hébergement du service WCF (code ci-dessus) nécessaire pour exécuter sous un utilisateur de domaine.

Questions connexes