【问题标题】:I am not able to read from Excel file and store into database using asp.net in c#?我无法在 c# 中使用 asp.net 从 Excel 文件中读取并存储到数据库中?
【发布时间】:2012-11-10 10:38:30
【问题描述】:

我这样做是为了阅读:

private bool writetoven(string xlspath)
{
    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString)


    try
    {
        OleDbCommand ocmd = new OleDbCommand("select * from [Sheet1$]", excelConnection);
        excelConnection.Open();
        OleDbDataReader odr = ocmd.ExecuteReader();
        string vcode = "";
        string pswd = "";
        string vname = "";

        while (odr.Read())
        {
            vcode = valid(odr, 0);
            pswd = valid(odr, 1);
            vname = valid(odr, 2);

            insertdataintosql(vcode,pswd,vname);
        }
        excelConnection.Close();
        return true;
    }
    catch (DataException)
    {
        return false;
    }
    finally
    {
        lblmsg4.Text = "Data Inserted Sucessfully";
    }
}

而我的连接字符串是这样的:

excelConnectionString = "provider=Microsoft.jet.oledb.4.0;data source=" + 
                        filepath1 + 
                        ";extended properties='Excel 8.0;HDR=YES;'";

但我收到一个错误

Microsoft Jet 数据库引擎无法打开文件“”。它已被其他用户独占打开,或者您需要权限才能查看其数据。

第 1574 行:OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
第 1575 行:
第 1576 行:excelConnection.Open();
第 1577 行:
第 1578 行:

文件似乎仍然打开但它没有,我检查了正在运行的进程并且它不存在

现在我该怎么办? ...我的 Excel 工作表已关闭,但出现此错误

我的 com 上没有 microsoft 访问权限,这可能是个问题

这个问题与我正在使用的文件上传控件有关吗?

【问题讨论】:

  • 你打电话给excelConnection.Open();两次有什么特殊原因吗?此外,我会检查 TaskManager 是否有任何 Excel 在后台运行 的实例(不可见)并打开您的文件!
  • 是的,这是我的错,抱歉……但我删除了它,但仍然无法工作
  • 这个问题是否与我正在使用的文件上传控件有关??
  • 尝试使用LINQ-To-Excel 看看是否适合您。
  • 您的任务管理器中是否有任何 Excel 进程正在运行?

标签: c# asp.net excel


【解决方案1】:

嗯,错误说:

无法打开文件''。

所以看起来您的 Excel 连接字符串似乎无效 - 它没有有效的 Excel 文件名!

您在何时何地设置 Excel 连接字符串?

您当时使用的filepath1 是否有效?

它是否包含有效的 Excel 文件名??

更新:我不明白的原因是:您将 xlspath 作为参数传递给您的方法 - 但是,您似乎没有在任何地方使用该 xlspath - 最肯定不要将你的 excelConnectionString 连接在一起 ....

private bool writetoven(string xlspath)
{
    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString)

您能否在此行上设置断点 - 您的 excelConnectionString 是什么样的 - 就在您创建连接之前?会不会是 xlspath 包含 vendor.xls - 但是您的 Excel 连接字符串甚至从未设置为该值??

【讨论】:

  • 我在单击按钮时使用它...我是否应该在我的 qus 中提供连接字符串我也在上传 .xls 文件
  • 我得到的文件路径1是:Vendor.xls
  • 我的电脑没有微软访问权限是这个问题吗??
  • 我在excelConnectionString上收到了这个"provider=Microsoft.jet.oledb.4.0;data source=Vendor.xls;extended properties='Excel 8.0;HDR=YES;'"..
  • @Drone:也许您需要传递完全限定路径和文件名——而不仅仅是文件名......
【解决方案2】:

确保运行您的网络应用程序的帐户对该文件具有权限。

此外,由于您没有使用路径,而只是使用文件名,因此它可能无法找到它所在的文件。该文件相对于您的 Web 应用程序位于何处?

System.IO.File.ReadAllBytes(filepath1) 是成功还是失败?

由于您正在处理文件上传:

用户正在通过浏览器从他们的计算机上传,并且文件在发布响应中传输到您的服务器。见:http://blog.divergencehosting.com/2009/03/12/upload-read-parse-file-aspnet/

即使您拥有完整路径,您也无法从您的服务器访问用户计算机上的文件。浏览器会在uploadControl.PostedFile.InputStream; 中向您发送文件的副本,其中up​​loadControl 是您的asp:FileUpload 控件的名称。

然后您需要将此流保存到服务器上的文件位置,并提供此连接字符串的完整路径。

如果您使用 EPPlus 之类的工具而不是 OleDbConnection 来读取文件,则可以使用内存中的流而不是先保存文件。

【讨论】:

  • System.IO.File.ReadAllBytes(filepath1) 失败
  • 是的,我刚刚发现我需要完整的路径名。你能告诉我如何在 fileuploder 控件中获取完整路径吗?我只得到文件名
  • 尝试将 filename1 设置为 @"D:\Vendor.xls" 然后如果那是它所在的位置。我怀疑这就是您的网络应用程序所在的位置,网络应用程序不知道 Vendor.xls 恰好不在网络应用程序目录中,但实际上在 D: 的根目录中
  • 您不会在文件上传控件中使用文件路径。你知道我有一个偷偷摸摸的怀疑这是你试图做的,但想先解决位置问题。
  • 通过文件上传,您将没有文件的路径。用户正在通过浏览器从他们的计算机上传,并且文件在发布响应中传输到您的服务器。见:blog.divergencehosting.com/2009/03/12/…
【解决方案3】:

您的 Excel 文件已在 Microsoft Excel 中打开。关闭 Excel 窗口,一切都会好起来的。

【讨论】:

  • 我的 excel 窗口已关闭...我没有任何打开的 excel 文件
  • @Drone 好吧,这对我来说已经一百次了。
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
相关资源
最近更新 更多