我正在尝试从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();
答案 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包使用。让我知道你也想让我分享那个。