如何为已在使用的文件捕获异常“ OleDbException(0x80004005)”

问题描述 投票:1回答:1

我有一个.NET应用程序,它从Access DB文件获取信息,它使用System.Data.OleDb.OleDbConnection连接到它们,事实是,由于出现了.ldb文件,这些文件有时不可用然后,当它们不可用时,IIS会向我抛出消息:

异常详细信息:System.Data.OleDb.OleDbException:Microsoft Jet数据库引擎无法打开文件'\ SMXH001ABAP05 \ Database \ LeanSuite.mdb'。它已经由另一个用户专门打开,或者您需要权限才能查看其数据。

对我来说很有意义,问题是我想捕获该异常,以便可以将其重定向到“请稍候”站点,但是我没有设法捕获这种类型的异常,现在我不知道真的知道我的Try Catch应该在哪里(假设那是我必须使用的)。

这里是建立连接的aspx.vb文件代码。

Dim DS As System.Data.DataSet
        Dim MyCommandActual As System.Data.OleDb.OleDbDataAdapter
        Dim MyCommandTarget As System.Data.OleDb.OleDbDataAdapter
        Dim MyCommandFallas As System.Data.OleDb.OleDbDataAdapter
        Dim MyCommandTool As System.Data.OleDb.OleDbDataAdapter
        Dim MyCommandCalidad As System.Data.OleDb.OleDbDataAdapter
        Dim MyCommandAsistencias As System.Data.OleDb.OleDbDataAdapter
        Dim MyCommandMaterial As System.Data.OleDb.OleDbDataAdapter
        Dim MyConnection As System.Data.OleDb.OleDbConnection

        'Connecting with DB
        MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=\\SMXH001ABAP05\Database\LeanSuite.mdb")

        'Establishing Querys
        MyCommandActual = New System.Data.OleDb.OleDbDataAdapter("select * from tblSICL WHERE tblSICL.ConditionID=2628 AND StationText=" + """TAT1""", MyConnection)
            MyCommandTarget = New System.Data.OleDb.OleDbDataAdapter("select * from tblSICL WHERE tblSICL.ConditionID=2629 AND StationText=" + """TAT1""", MyConnection)
            MyCommandFallas = New System.Data.OleDb.OleDbDataAdapter("select Distinct OperationText from tblSICL, tblOperations WHERE  tblOperations.ID = tblSICL.OperationID AND tblSICL.ConditionID IN (2681,2682,2697,2698,2709,2710,2713,2714,2725,2726,2693,2694) AND Value=1 AND ZoneTypeID= 1 ", MyConnection)
            MyCommandTool = New System.Data.OleDb.OleDbDataAdapter("select Distinct OperationText from tblSICL, tblOperations WHERE tblOperations.ID = tblSICL.OperationID AND tblSICL.ConditionID in (2689,2690,2691,2692,2705,2706,2707,2708,2721,2722,2723,2724) AND Value=1 AND ZoneTypeID= 1 ", MyConnection)
            MyCommandCalidad = New System.Data.OleDb.OleDbDataAdapter("select Distinct OperationText from tblSICL, tblOperations WHERE tblOperations.ID = tblSICL.OperationID AND tblSICL.ConditionID in (2685,2686,2687,2688,2701,2702,2703,2704,2717,2718,2719,2720) AND Value=1 AND ZoneTypeID= 1 ", MyConnection)
            MyCommandAsistencias = New System.Data.OleDb.OleDbDataAdapter("select Distinct OperationText from tblSICL, tblOperations WHERE tblOperations.ID = tblSICL.OperationID AND tblSICL.ConditionID in (2679,2695,2711) AND Value=1 AND ZoneTypeID= 1 ", MyConnection)
            MyCommandMaterial = New System.Data.OleDb.OleDbDataAdapter("select Distinct OperationText from tblSICL, tblOperations WHERE tblOperations.ID = tblSICL.OperationID AND tblSICL.ConditionID in (2683,2684,2699,2716) AND Value=1 AND ZoneTypeID= 1 ", MyConnection)

            Dim fila As DataRow

            'Reading Actual Value
            DS = New System.Data.DataSet()
            MyCommandActual.Fill(DS)
            fila = DS.Tables(0).Rows(0)
            lblActual.Text = fila("Value")
            Dim objetoAndon As New AndonDBClass
            'objetoAndon.insertProduction(fila("Value"), 1)
 MyConnection.Close()
End Sub
.net vb.net ms-access oledb
1个回答
0
投票

似乎您正在尝试仅通过此连接读取数据。

查看是否以只读方式打开连接会有所帮助。

更改:

MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=\\SMXH001ABAP05\Database\LeanSuite.mdb")

收件人:

MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=\\SMXH001ABAP05\Database\LeanSuite.mdb; Mode=Read")

还有其他人建议将您的请求包装在try / catch中将很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.