2017-04-19 17 views
0

WebアプリケーションのためにデータをExcelに読み込んでデータベースに格納しようとしていますが、オープン中にOleDbConnectionにエラーが発生します。OleDbConnectionを開いているときにハンドルされない例外が発生しました

それはエラーを示しています

The Microsoft Office Access database engine cannot open or write to the file. It is already opened exclusively by another user, or you need permission to view and write its data.

事前にsolution.Thanksを持っているなら、私に知らせてください。

string path = FileUpload1.PostedFile.FileName; 
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data 
           Source=" + path + ";Extended Properties=Excel 12.0;"; 
OleDbConnection olcon=new OleDbConnection(excelConnectionString); 
try 
{ 
    olcon.Open(); 
} 
catch (NullReferenceException) { } 
OleDbCommand cmd=new OleDbCommand("SELECT * FROM [Sheet1$]",olcon); 
OleDbDataReader dr; 
dr=cmd.ExecuteReader(); 
SqlBulkCopy bulkcopy=new SqlBulkCopy("Data Source=.\\sqlexpress;Initial 
             Catalog=MvcDB;Integrated Security=True"); 
bulkcopy.DestinationTableName="EMPLOYEE"; 
bulkcopy.WriteToServer(dr); 

olcon.Close(); 
+0

oledb接続 – Krishna

答えて

0

最初に、あなたのユーザーにファイルに対する読み取り/書き込み権限があることを確認してください。
第2に、誰もファイルをロックしていないことを確認してください。

あなたのファイルはどこにありますか?
たとえば、ネットワークフォルダ上の共有ファイルの場合は、ロックを解除するためにサーバー側のファイルを閉じる必要があります(または、ファイルを開いた人にファイルを閉じるよう依頼してください)。

FileUpload1.PostedFile.FileNameがどこにあるかチェックする必要があります。

+0

ファイルがサーバー側に保存されていないため、読み取ったときにExcelが読み取り専用モードになっているか、正しく閉じられていません。ファイルは完全に制御されていますが、まだ正しく動作していません。 –

+0

ファイルには何らかのロックがあります。自分のプログラムがどこかでロックを保持しているのでしょうか? – Hybris95

0

ファイルアップロードの場合、サーバーパスにマップする必要があります。

string serverUploadArea = ... 
var filePath = HttpContext.Current.Server.MapPath(serverUploadArea + postedFile.FileName); 
0

このファイルはFileUploadでのみ使用されているため、このエラーが発生しています。これを取り除くには、まずファイルをローカルディレクトリまたはサーバーパスに保存する必要があります。

if (uploadOne.HasFile) 
{ 
    string FileName = Path.GetFileName(uploadOne.PostedFile.FileName); 
    string FolderPath = ConfigurationManager.AppSettings["FolderPath"]; 
    string FilePath = FolderPath + FileName; 
    ViewState["Name"] = FilePath; //Just if it needs to be used at later stage of time 
    uploadOne.SaveAs(FilePath); 
} 

接続文字列、つまりローカルディレクトリにファイルを保存する場合はディレクトリにフォルダパスを定義できます。 ファイルを保存しない場合は、EPPLUSライブラリを使用することをお勧めします。これは、ナゲットパッケージとして利用可能です。あなたも私にそのことを教えてもらいたいということを私に教えてください。

+0

このコードを実行しましたが、「SaveAsメソッドがルートパスを必要とし、パス '〜/ Uploaded Folder /'がルートされていません」というエラーが表示されます。 –

+0

D:/ FolderName /のようなローカルパスを与える必要があります。または、アプリケーションフォルダにファイルを保存しようとしています。後でそのような場合は、Server.MapPath(FilePath) –

関連する問題