天天看點

C# 操作.mdb檔案出現.ldb鎖死檔案 無法删除.mdb檔案

問題:   有個問題困擾我很長時間了 access資料庫操作 當通路.mdb檔案會出現一個.ldb鎖死檔案 我想用代碼删除.mdb檔案 可是操作不了 提示被另一個程式調用

c#做法類似

  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

http://topic.csdn.net/u/20120528/16/1638f17f-9839-45d5-8427-5b30586bce94.html?seed=1172642860&r=78710267#r_78710267