2016-10-31 4 views
2

*.xlsxファイルからデータベースにデータをロードするには、SQLのバルクコピーを使用します。しかし、ファイルサイズが約1MBを超えると、私はこの問題に直面しました。私はOleDbConnectionを開こうとすると、私はエラー〜1MBを超えるサイズのOleDbでxlsxファイルを読み取ることができません

No error message available, result code: E_FAIL(0x80004005)

を取得誰もがそのような行動についての考えを持っていますか?

P.S.ファイルサイズが上記よりも小さい場合、すべてが期待通りに機能します。

string connString = connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0 Xml;"; 

// Create the connection object 
OleDbConnection oledbConn = new OleDbConnection(connString); 
// Open connection 
oledbConn.Open(); 
// Create OleDbCommand object and select data from worksheet 
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + WorkSheetName + "$" + DataRange + "]", oledbConn); 
OleDbDataReader dr = cmd.ExecuteReader(); 

string ProfDbBulkCopyConnString = ConfigurationManager.ConnectionStrings["DbBulkCopyConnString"].ToString(); 
SqlBulkCopy sb = new SqlBulkCopy(ProfDbBulkCopyConnString); 
sb.ColumnMappings.Add("Status", "ActionStatus"); 
sb.ColumnMappings.Add("Process", "ProcessExec"); 
sb.DestinationTableName = "dba.Execute"; 
sb.WriteToServer(dr); 
+0

あなたがこれを行うために使用するソースコードが役立つかもしれません...そして、あなたの次の質問をする前に[ask]を読んでください。 –

+0

@Chomelここにあります。うまくいけば、何も混乱しない。 – managerger

+0

さらに詳しい情報が得られました! –

答えて

1

固定の簡単な説明。詳細については、私が訪問することをお勧めします。

基本的に、 XLSXフォーマットは XMLファイルの束とzipアーカイブのいくつかの種類です。したがって、まずACEOLEDBプロバイダはすべてのデータをメモリバッファに直接解凍しようとしますが、大きなxlsxファイルプロバイダがすべてのデータをメモリバッファに解凍できない場合、ハードドライブに一時ファイルを作成する必要があります。ユーザーがフォルダへのアクセス許可を持っていない場合、上記の問題が表示されます。 フォルダへのパスは、環境によって異なります。私の場合、C:¥Windows¥SysWOW64¥config¥systemprofile¥AppData¥Local¥Microsoft¥Windows¥Temporary Internet Files¥Content.MSO(64ビットWindosw Server 2008 R2の32ビットドライバ)です。 したがって、ユーザー "IIS AppPool \ DefaultAppPool"のContent.MSOへのアクセスを許可し、問題は解決しません。

関連する問題