2017-03-03 6 views
0

最近、C#windowsフォームアプリケーションを作成するタスクが割り当てられました。大量のデータをAccessデータベースから読み取ってSQLデータベースに転送し、転送する前に古いSQLデータを削除する必要があります。AccessデータベースとSQLデータベースとの間でデータを転送するための最良の方法

このようなことは一度もありませんでした。

また、各Accessテーブルを個別に読み取って、それぞれのテーブルのdataset1、dataset2といった異なるデータセットに保存する必要がありますか?

ご協力いただきまして誠にありがとうございます。

おかげ

+3

Sql Server Integration Services .. – Max

答えて

0

あなたがC#アプリケーションで独自の転送メカニズムを実装することを決定し、あなたが本当に大量のデータで作業している場合は、この方法を選択するように注意してくださいSQL Serverに行単位でデータを挿入することはありません。明らかに

OdbcDataReader rdrAccess = cmdAccess.ExecuteReader(); 
while (rdrAccess.Read()) 
{ 
    // insert a row into SQL Server 
} 

のようなアプローチは、ほぼ確実に遅くなりますが、

using (var cmd = new OdbcCommand()) 
{ 
    cmd.Connection = connAccess; 
    cmd.CommandText = 
     $"INSERT INTO [ODBC;{connStrSqlOdbc}].[BulkTable] (id, txtcol) " + 
     $"SELECT ID, TextField AS txtcol FROM Table1 WHERE ID<=1000"; 
    cmd.ExecuteNonQuery(); 
} 

のようにも単一のAccess SQLステートメントは、フォームの1000年の個々のT-SQL文

exec sp_executesql N'INSERT INTO "dbo"."BulkTable" ("id","txtcol") VALUES (@P1,@P2)',N'@P1 int,@P2 nvarchar(50)',1,N'record000000' 
exec sp_executesql N'INSERT INTO "dbo"."BulkTable" ("id","txtcol") VALUES (@P1,@P2)',N'@P1 int,@P2 nvarchar(50)',2,N'record000001' 
exec sp_executesql N'INSERT INTO "dbo"."BulkTable" ("id","txtcol") VALUES (@P1,@P2)',N'@P1 int,@P2 nvarchar(50)',3,N'record000002' 
... 
exec sp_executesql N'INSERT INTO "dbo"."BulkTable" ("id","txtcol") VALUES (@P1,@P2)',N'@P1 int,@P2 nvarchar(50)',1000,N'record000999' 
を送ることになります

をSQL Serverに追加します。

おそらくあなたの最善の策は、私のテストネットワーク上でとても

using (var cmd = new OdbcCommand()) 
{ 
    cmd.Connection = connAccess; 
    cmd.CommandText = "SELECT ID, TextField AS txtcol FROM Table1 WHERE ID<=1000"; 
    using (OdbcDataReader rdr = cmd.ExecuteReader()) 
    { 
     using (var sbc = new SqlBulkCopy(connStrSqlClient)) 
     { 
      sbc.DestinationTableName = "BulkTable"; 
      sbc.WriteToServer(rdr); 
     } 
    } 
} 

、一貫した時間の10分の1未満に仕上がっSqlBulkCopyアプローチINSERT INTO ... SELECT方法のように、System.Data.SqlClientSqlBulkCopyオブジェクトを使用することです取った。

0

このツールを使用することができます。これは、あなたのタスクのためのツールであり、これはあなたが使用したいものですSQL Serverの統合サービス(SSIS) と呼ばれます。

また、あなたがネットで何かを作ることもできますが、データセットを使用しているため、メモリ、パフォーマンスの、恐ろしいアイデアであり、あなたが巨大なデータを言及するので...

それとも、MSAccessをファイルと転送を読み取るためにOPENROWSET構文を使用することができますSQLクエリを使用してデータをSQLに変換します。

、おそらくそれを行うには他の方法のダース...

関連する問題