我用于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 '*********************** 以上部分为导入数据
导致连接还没释放掉
Close()
应放在finally里面
事实上,
AdoConn.Cancel()
AdoConn.Close()
AdoConn = Nothing 这三行代码是被正确执行的,之前并没有跳出任何错误