2011-01-10 10 views
1

どうすればいいですか?私はおよそ10000のレコードをExcelファイルに入れて、できるだけ早くすべてのレコードをアクセスデータベースに挿入したいのですか?バルクはC#からアクセスデータベースに挿入しますか?

提案がありますか?

+5

レコードはどこにありますか?別のデータベースでは、データファイルですか?どのような形式ですか? – tijmenvdk

+0

あなたは速い=実行者、または速い=簡単なことを意味しますか?また、「レコードはどこにありますか? –

答えて

0

Accessでデフォルトのデータインポート機能を使用します。それがあなたのニーズに合っておらず、C#を使用したい場合は、標準のADO.NETを使用して、単にrecord-for-recordを書いてください。 10Kレコードは長すぎるはずはありません。影響を受ける表上の索引オフ

Dim AccessConn As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Test Files\db1 XP.mdb") 
    AccessConn.Open() 
    Dim AccessCommand As New System.Data.OleDb.OleDbCommand("SELECT * INTO [ReportFile] FROM [Text;DATABASE=C:\Documents and Settings\...\My Documents\My Database\Text].[ReportFile.txt]", AccessConn) 
    AccessCommand.ExecuteNonQuery() 
    AccessConn.Close() 

スイッチの負荷を開始してからの一括読み込みが完了した後に、ゼロからインデックスを再構築する前に:あなたは何ができるか

+0

SQLステートメントを作成する際に、すべてのレコードを一度に挿入する接続に対して実行するのは難しいことではありません。 – Fionnuala

+0

レコードのレコードが長すぎて、私には受け入れられません。レコードはExcelファイル内にあります。 – Ilyas

+1

あなたのソースがExcelファイルであることが分かっているなら、それを質問に入れると役立ちます。これにより、人々はあなたのシナリオを推測することができなくなります。あなたの質問にC#でタグを付けたので、コードからこれをやりたいと思っています。 – tijmenvdk

1

はこのようなものです。大量のデータを表にロードしている最中に索引を最初から再構築するほうが高速です。

行単位で挿入する場合は、トランザクションを使用することを検討してください。同様に、オープントランザクション、1000レコードを挿入、トランザクションをコミットします。これは正常に動作するはずです。

+0

こんにちは このコードは3行目 - ReportFileと[Text; Database = XXX] – Ilyas

+0

@Ilyas接続文字列を見てください。上記はテキスト用です。また、Excel文字列を使用することもできます。http:///www.connectionstrings.com/excel – Fionnuala

+0

わずか10Kレコードのインデックスを削除するのはなぜですか?それはピーナッツだ。そして、あなたがそれらを入れ直すと、それは、とにかく、それらに人口を配置しなければならないので、あなたは本当にそれほど多くを得ていません。そして、率直に言って、データがインデックスに違反した場合、そのデータが1つまたは複数のインデックスに違反しているため、インデックスの再作成が失敗した場合よりも、データを却下することになります。 –

関連する問題