打开OleDbConnection时出现未处理的异常

时间:2017-04-19 08:32:29

标签: c# asp.net oledb

我正在尝试从excel中读取数据并将数据存储到数据库以用于Web应用程序,但它在打开时会给OleDbConnection带来错误。

显示错误:

  

Microsoft Office Access数据库引擎无法打开或写入该文件。它已由其他用户独占打开,或者您需要获得查看和写入其数据的权限。

如果您有解决方案,请告诉我。谢谢。

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();

3 个答案:

答案 0 :(得分:0)

首先,确保您对用户的文件具有读/写权限 其次,确保没有人锁定文件。

您的档案在哪里?
例如,如果它是网络文件夹上的共享文件,则可能必须关闭服务器端文件以删除锁定(或询问打开文件的人将其关闭)。

您可能需要检查FileUpload1.PostedFile.FileName的位置。

答案 1 :(得分:0)

如果是文件上传,则需要将其映射到服务器路径。

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

答案 2 :(得分: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库。它可以作为nuget包使用。让我知道你也想让我分享那个。

相关问题