2010-12-14 51 views
1

j'ai une application console en C# qui extrait 20 champs d'un oracle DB witht il le code ci-dessous et je voulais un moyen efficace de les insérer dans SQL 2005.C# 20 000 enregistrements sélectionnés de besoin oracle à insérer dans SQL2005

je veux dotn d'insérer chacun des 20 000 dans la boucle while, évidemment. Je pensais à changer le code pour utiliser un ensemble de données pour mettre en cache tous les enregistrements, puis faire un encart en vrac ...

pensées? Pseudo code serait bien parce que je suis nouveau à Oracle.

ceci est mon code où je testais obtenir une connexion à Oracle et voir si je peux voir les données ... maintenant je peux le voir je veux le sortir et dans sql2005 ... que puis-je faire ici?

static void getData() 
{ 
    string connectionString = GetConnectionString(); 
    using (OracleConnection connection = new OracleConnection()) 
    { 
     connection.ConnectionString = connectionString; 
     connection.Open(); 

     OracleCommand command = connection.CreateCommand(); 
     string sql = "SELECT * FROM BUG"; 
     command.CommandText = sql; 

     OracleDataReader reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      //string myField = (string)reader["Project"]; 
      string myField = reader[0].ToString(); 
      Console.WriteLine(myField); 
     } 
    } 

} 
+4

En supposant des autorisations, vous auriez pu utiliser une instance de serveur lié de SQL Server (ou un dblink d'Oracle) pour connecter directement les bases de données pour l'importation des données. –

+1

Si vous allez le faire régulièrement, pensez à utiliser SSIS. Ce genre de chose est une force, et il sera volontiers optimisé pour les encarts en vrac. –

+0

Je vous recommande d'enrouler votre 'OracleDataReader reader = ...' dans un 'using'. –

Répondre

1

Vous pouvez créer un fichier CSV, puis utiliser BULK INSERT pour insérer le fichier dans SQL Server. Jetez un oeil here pour un exemple.

+0

pouvez-vous expliquer un peu plus sur la façon de générer le csv. Je suis clair sur comment l'importer à partir de l'article (merci) – kacalapy

+0

Si vous avez connecté et sélectionnez privs sur l'oracle db, vous pouvez probablement utiliser le package UTL_FILE pour extraire les données en tant que fichier csv. Vous auriez probablement besoin de droits d'administrateur sur l'hôte/serveur. Sinon, essayez l'application SQL Developer pour Oracle DB, vous pouvez extraire le fichier au format CSV via l'application. – suhprano

0

L'insert "bulk" avec le Dataset mis en cache fonctionnera exactement comme la boucle while que vous ne voulez pas écrire! Le problème est que vous perdrez le contrôle du processus si vous essayez d'utiliser l'insertion "bulk" de la classe Dataset. C'est un travail étranger à la fin. La meilleure solution est peut-être d'utiliser un DataWriter afin de disposer d'un contrôle complet et d'un surcoût de Dataset.

0

Vous pouvez réellement faire 100-1000 insertions par lot de SQL. Il suffit de générer plusieurs insertions, puis soumettre. Régénérez le lot SELECT suivant PENDANT LES PREMIERS EXECUTES.

+1

Le fournisseur .NET ne fonctionne pas avec les lots, comment pouvons-nous le faire? Je n'ai jamais été capable de lancer des lots. – Aliostad