2010-12-14 4 views
1

に挿入する必要があり、私は彼が次のコードと私はSQL 2005C#20,000レコードSQL2005

にそれらを挿入するための効率的な方法を望んでいたwithtのOracle DBから20個のフィールドを抽出し、C#でコンソールアプリケーションを持っています

私は、明らかにwhileループの中に20,000のそれぞれを挿入したいと思っています。私はすべてのレコードをキャッシュするためにデータセットを使用するようにコードを変更し、次に一括挿入を行うことを考えていました...

thoughts?

私はoracleを初めて使っているので、擬似コードがうまくいくはずです。

これは私がオラクルへの接続をテストしていて、データを見ることができるかどうかをテストしていたところです...今、私はそれを見ることができます。ここに?

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

権限を前提として、SQL ServerのLinked Serverインスタンス(またはOracleのdblink)を使用して、データをインポートするデータベースを直接接続することができます。 –

+1

これを定期的に行う場合は、SSISの使用を検討してください。この種のことはその強みであり、バルクインサートのために喜んで最適化されます。 –

+0

'OracleDataReader reader = ...'を 'using'でラップすることをお勧めします。 –

答えて

1

CSVファイルを作成し、BULK INSERTを使用してファイルをSQL Serverに挿入できます。たとえば、hereを見てください。

+0

csvの生成方法についてもう少し説明できますか?記事からインポートする方法についてはっきりしています(ありがとう) – kacalapy

+0

oracle dbで接続してprivを選択した場合、おそらくUTL_FILEパッケージを使用してデータをcsvファイルとして抽出できます。あなたはおそらくホスト/サーバーへの管理者権限も必要とするでしょう。 そうでない場合は、Oracle DBのSQL Developerアプリを試してください。アプリからCSV形式でファイルを抽出できます。 – suhprano

0

キャッシュされたデータセットの「一括」挿入は、書き込みしたくないwhileループとまったく同じように機能します。問題は、Datasetクラスの「一括」挿入を使用しようとすると、プロセスを制御できなくなることです。それは最後に無関係です。

おそらく、最高の解決策は、完全な制御とデータセットオーバーヘッドを持たないようにDataWriterを使用することです。

0

実際にSQLバッチごとに100-1000個の挿入を行うことができます。複数のインサートを生成してから送信してください。最初の実行中に次のSELECTバッチを事前に生成します。

+1

.NETプロバイダはバッチでは動作しません。どのようにすればいいですか?私は決してバッチを実行することができませんでした。 – Aliostad

関連する問題