2012-03-28 14 views
0

ここに物語です:wledfのOledbに大きなExcelファイルに関する問題がありますか?

Excelシートをデータベースにインポートします。 ファイルの選択、正しいシートとシートの構成など、クライアントでいくつかの準備をします。

これがすべて完了したら、私のローカルwcfサーバーにファイルを送信します。
次に、wcfはファイルを一時フォルダ(C:\ Windows \ Temp)に書き込みます。
oledb接続を作成し、シート上でcount(*)コマンドを実行します。これが間違っています。

コード:

  _connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\""); 
      OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM [" + .SheetName + "]", _connection); 
      if (_connection.State == ConnectionState.Closed) 
       _connection.Open(); 
      TotalRows = (int)command.ExecuteScalar(); 

はい、私はここで使用してを使用していないよ、(int)command.ExecuteScalar();が実行されるとしてください...
それがうまくいかないことを気にしません。
エラーメッセージ:System resource exceeded.が表示されます。これはOleDBExceptionです。

コンピュータのメモリがいっぱいになっていないため、ファイルを読み取ろうとしても表示されません。すぐにクラッシュします。

私は読んしようとするファイルに関するいくつかの情報:

  • それは114列
  • サイズが154K行
  • を持っている私はのサブセットを取る場合

90MBですこの50k行は、クラッシュしません。
TotalRowsは2536だと言われていますが、
最初は私のファイルが壊れていましたが、まったく同じコードがクライアント上で全く同じファイルで動作していたからです。

2500行のサブセットを取得すると、すべてうまくいって問題が発生します。私は2600行のサブセットを取る場合は、行数はまだ私の質問2536.

ある
を(その行は関係ありません):

  • 間違って起こっていますか?
  • エラーとその結果の間違いは誰が責任を負いますか?
  • なぜクライアント上で動作しますが、私のサーバ上で動作しません(同じマシン!)
  • 小さいファイルでクラッシュしないのはなぜですか?

詳細情報が必要ですか?コメントを残してください。

更新1:
クライアントとサーバーの両方が32ビットアプリケーションとして実行されます。

+0

簡単な質問;サーバーは32ビットモードで動作しますか?クライアントは64ビットモードで動作しますか? – Alxandr

+0

@Alxandr:更新内容を確認してください。 – Mixxiphoid

答えて

2

同じ問題があります。私はウェブサイトから30k行のファイルを読み込もうとしています。 しかし、私は8007行のサブセットしか取っていません。 ネットワークサービスの代わりにアプリケーションプールIDを管理者に変更すると、すべてが正常であることがわかりました。また、エクセルファイルを.xlsに変換した場合、Jetプロバイダは30k行も読み込むことができます。

私はフォーラムを見て、それを見つけ、ExtendedPropertiesパラメータIMEX = 1でコードを試してみました。すべての30k行が読み込まれました。

+0

それは確かに私が持っている同じ問題です。私は数日であなたの提案を試みます。 – Mixxiphoid

+0

次に、フォーラムを見て、それを見つけて、ExtendedPropertiesパラメータIMEX = 1でコードを試してみて、すべての30k行が読み込まれました。 – askito

関連する問題