我用于BS上导出数据,在我建表,并导出全部数据到ACCESS文件中,最后关闭 AdoConn 后,为什么该ACCESS文件仍处于锁定状态?
具体代码如下:
        Dim cat As ADOX.Catalog = New ADOX.Catalog  'ADOX.CatalogClass = New ADOX.CatalogClass
        cat.Create(Connstr)        Dim tbl As ADOX.Table = New ADOX.Table   'ADOX.TableClass = New ADOX.TableClass
        tbl.ParentCatalog = cat
        tbl.Name = "MediaRecords"        Dim col As ADOX.Column  'ADOX.ColumnClass
        Dim i, j As Integer        For i = 0 To UBound(DyFlds) - 1
            col = New ADOX.Column  'ADOX.ColumnClass
            col.ParentCatalog = cat
            col.Name = DyFlds(i, 2)
            If i = 0 Then
                col.Type = ADOX.DataTypeEnum.adInteger
                col.Properties("Jet OLEDB:Allow Zero Length").Value = False
                tbl.Columns.Append(col, ADOX.DataTypeEnum.adBigInt, 0)
            Else
                col.Properties("Jet OLEDB:Allow Zero Length").Value = True
                tbl.Columns.Append(col, ADOX.DataTypeEnum.adVarChar)
            End If
        Next        cat.Tables.Append(tbl)
        cat.Tables.Refresh()        'System.Runtime.InteropServices.Marshal.ReleaseComObject(tbl)
        'System.Runtime.InteropServices.Marshal.ReleaseComObject(cat)        col = Nothing
        tbl = Nothing
        cat = Nothing        '*********************** 以上部分为建库和建表        Dim AdoConn As New ADODB.Connection
        AdoConn.ConnectionString = Connstr
        AdoConn.Open()        Dim sql As String = "exec GetArchivesForExport '" & _where & "'"
        Dim Db As Db = New Db()
        Dim InStr As String = ""
        Dim BStr As String = ""
        Dim FullStr As String = ""        Try            BStr = "insert into MediaRecords ("
            For i = 0 To UBound(DyFlds) - 1
                If i < (UBound(DyFlds) - 1) Then
                    BStr = BStr & DyFlds(i, 2) & ","
                Else
                    BStr = BStr & DyFlds(i, 2)
                End If
            Next            BStr = BStr & ") values ('"            Dim dt As DataTable = Db.getDs(sql).Tables(0)
            Dim dr As DataRow
            For i = 0 To dt.Rows.Count - 1
                For Each dr In dt.Rows
                    InStr = ""
                    For j = 0 To UBound(DyFlds) - 1
                        If j < (UBound(DyFlds) - 1) Then
                            InStr = InStr & dr(DyFlds(j, 1)) & "','"
                        Else
                            InStr = InStr & dr(DyFlds(j, 1))
                        End If
                    Next
                    InStr = InStr & "')"
                Next
                FullStr = BStr & InStr
                AdoConn.Execute(FullStr)
            Next            AdoConn.Cancel()
            AdoConn.Close()
            AdoConn = Nothing            '*********************** 以上部分为导入数据
           

解决方案 »

  1.   

    有可能写的时候遇到了问题
    导致连接还没释放掉
    Close()
    应放在finally里面
      

  2.   

    我放在finally 里面还是不行,
    事实上,
                               AdoConn.Cancel() 
                            AdoConn.Close() 
                            AdoConn   =   Nothing 这三行代码是被正确执行的,之前并没有跳出任何错误