【问题标题】:How to read an excel while in use by another user with Oledb?如何在使用 Oledb 的其他用户使用时读取 excel?
【发布时间】:2014-04-28 09:54:19
【问题描述】:

我在共享驱动器上有一个 excel,我的应用程序正在使用 Oledb 连接将数据从 excel 读取到 DataGridView。

    cn = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;" + "data source=" + skuPath + ";Extended Properties=""Excel 12.0;HDR=YES;""")
    q1 = "select * from [" + year + "$B4:AM300]"
    da = New System.Data.OleDb.OleDbDataAdapter(q1, cn)

    Try
        cn.Open()
        da.Fill(ds, "Table1")
    Catch e As OleDb.OleDbException
        Dim errorMsg As String
        Dim i As Integer
        errorMsg = ""
        For i = 0 To e.Errors.Count - 1
            errorMsg += "Index #" & i.ToString() & ControlChars.Cr _
                           & "Message: " & e.Errors(i).Message & ControlChars.Cr _
                           & "NativeError: " & e.Errors(i).NativeError & ControlChars.Cr _
                           & "Source: " & e.Errors(i).Source & ControlChars.Cr _
                           & "SQLState: " & e.Errors(i).SQLState & ControlChars.Cr
        Next i
    End Try

    cn.Close()
    dt = ds.Tables(0)

当 excel 文件已被其他用户打开时,您会在 excel 中收到此通知:

在这些情况下,我的代码在最后一行返回此错误:

An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
Additional information: Cannot find table 0.

所以我的理解是,因为文件正在使用中,所以整个连接没有返回任何内容,因此数据表为空。 我找到了几种确定文件是否正在使用的方法,但没有关于如何从正在使用的文件中读取的方法。 是否可以?如果是的话怎么办?

请记住,我只需要读取文件,如果可以始终以只读方式打开它,那就太棒了!

【问题讨论】:

    标签: sql .net vb.net excel oledb


    【解决方案1】:

    你不能。即使您使用 ODBC(只读),您也必须在阅读之前关闭打开的文件。 参考:http://forums.asp.net/t/1083489.aspx?open+a+Microsoft+Jet+OLEDB+4+0+connection+to+excel+file+read+only

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多