0

我这样做是为了阅读:

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 访问权限,这可能是个问题

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

4

3 回答 3

2

好吧,错误说:

无法打开文件''。

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

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

filepath1您在那一刻使用的有效吗?

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

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

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

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

于 2012-11-10T10:42:22.153 回答
1

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

于 2012-11-10T11:04:48.750 回答
1

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

此外,由于您没有使用路径,而只是使用文件名,因此它可能无法找到它所在的文件。该文件相对于您的 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 来读取文件,则可以使用内存中的流而不是先保存文件。

于 2012-11-12T06:35:37.833 回答