首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

怎么关闭程序对ACCESS文件的使用

2012-05-21 
如何关闭程序对ACCESS文件的使用我程序中动态创建了一个mdb文件,写入了数据,但是过程中可能要删除这个文件

如何关闭程序对ACCESS文件的使用
我程序中动态创建了一个mdb文件,写入了数据,但是过程中可能要删除这个文件,使用了一下代码断开连接和删除这个文 件,但是总是提示:mdb文件在被进程使用。请问如何断开这个进程使用?代码如下:
  ''''创建ACCESS数据库文件
  My.Computer.FileSystem.FileExists(SaveFile)
  Dim Cat As New ADOX.Catalog
  Cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SaveFile + ";")
  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  ''''''''''''写入ACCESS数据库
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  Dim ConnectionStr As String = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & SaveFileName
  Dim myConn As New OleDbConnection
  myConn.ConnectionString = ConnectionStr
  Dim sqlString As String
  Dim myCmd As OleDb.OleDbCommand
  myConn.Open()
  写入数据省略
  myConn.Close()
  myConn.Dispose()
  myConn = Nothing

然后想删除
  If My.Computer.FileSystem.FileExists(SaveFile) = True Then
  My.Computer.FileSystem.DeleteFile(SaveFile)
  End If

却总在这里报错。


[解决办法]
你可以这样,下面的代码测试通过

VB.NET code
   Dim SaveFile As String = "F:\test.mdb"    Dim SaveFileName As String = SaveFile    Dim Cat As New ADOX.Catalog    Cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SaveFile + ";")    Dim tbl As New ADOX.Table()    tbl.ParentCatalog = Cat    tbl.Name = "Table1"    '增加字段    tbl.Columns.Append("id", ADOX.DataTypeEnum.adInteger)    tbl.Columns.Append("工况", ADOX.DataTypeEnum.adVarWChar, 255)    tbl.Columns.Append("船舶运动", ADOX.DataTypeEnum.adVarWChar, 255)    tbl.Columns.Append("纵荡加速度", ADOX.DataTypeEnum.adVarWChar, 255)    tbl.Columns.Append("横荡加速度", ADOX.DataTypeEnum.adVarWChar, 255)    tbl.Columns.Append("垂荡加速度", ADOX.DataTypeEnum.adVarWChar, 255)    tbl.Columns.Append("测试", ADOX.DataTypeEnum.adVarWChar, 255)    tbl.Columns.Append("测试2", ADOX.DataTypeEnum.adVarBinary)    '主键    tbl.Columns("id").Properties("autoincrement").Value = True    tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id")    Cat.Tables.Append(tbl)    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''    ''''''''''''写入ACCESS数据库    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''    Dim ConnectionStr As String = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & SaveFile    Dim myConn As New OleDbConnection    myConn.ConnectionString = ConnectionStr    Dim sqlString As String    Dim myCmd As OleDb.OleDbCommand = Nothing    myConn.Open()    sqlString = "INSERT INTO Table1 (工况,船舶运动,纵荡加速度,横荡加速度,垂荡加速度,测试,测试2) "    sqlString = sqlString + vbCrLf + "VALUES(@工况,@船舶运动,@纵荡加速度,@横荡加速度,@垂荡加速度,@测试,@测试2)"    For i As Integer = 1 To 200      myCmd = New OleDbCommand(sqlString, myConn)      myCmd.Parameters.AddWithValue("@工况", "满载")      myCmd.Parameters.AddWithValue("@船舶运动", "纵摇")      myCmd.Parameters.AddWithValue("@纵荡加速度", i)      myCmd.Parameters.AddWithValue("@横荡加速度", i)      myCmd.Parameters.AddWithValue("@垂荡加速度", i)      myCmd.Parameters.AddWithValue("@测试", i)      myCmd.Parameters.AddWithValue("@测试2", i * i)      myCmd.ExecuteNonQuery()    Next    myCmd.Dispose()    myCmd = Nothing    myConn.Close()    myConn.Dispose()    myConn = Nothing    '释放ldb文件的关键    Cat.ActiveConnection.Close()    System.Runtime.InteropServices.Marshal.ReleaseComObject(tbl)    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(tbl)    System.Runtime.InteropServices.Marshal.ReleaseComObject(Cat)    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Cat)    Cat = Nothing    GC.WaitForPendingFinalizers()    GC.Collect()    GC.WaitForPendingFinalizers()    GC.Collect()    If My.Computer.FileSystem.FileExists(SaveFile) = True Then      My.Computer.FileSystem.DeleteFile(SaveFile)    End If 

热点排行