سلام
در دیتابیس اکسس اگه مقادیری در دیتابیس درج شده مثلا 200 مگ بعدا اون فایلها پاک بشه حجم دیتابیس همون200 نهایت 150 میشه حتی همه ردیف ها اگه پاک شده باشن باید دستی از منوی اکسس compact>repare نموده و کش پاک شود
حال من دنبال روشی برای پاک کردن این مشکل از درون برنامه سی شارپ هستم ولی هرچقدر تلاش کردم نتونستم درستش کنم بیزحمت راهنمایی کنید
این 2 متد رو نتونستم بکار بگیرم
public static void CompactAndRepair(string accessFile, Microsoft.Office.Interop.Access.Application app) { string tempFile = Path.Combine(Path.GetDirectoryName(accessFile), Path.GetRandomFileName() + Path.GetExtension(accessFile)); app.CompactRepair(accessFile, tempFile, false); app.Visible = false; FileInfo temp = new FileInfo(tempFile); temp.CopyTo(accessFile, true); temp.Delete(); } اینم یه متد دیگه public static void CompactAccessDB(string sFilePath, string sNewFilePath) { try { string sCompactError = string.Empty; object[] oParams; object oJRO = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine")); oParams = new object[] { string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", sFilePath), string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\FilesDB.accdb OLEDB:Engine Type=5", sNewFilePath) }; oJRO.GetType().InvokeMember("CompactDatabase", System.Reflection.BindingFlags.InvokeMethod, null, oJRO, oParams); System.IO.File.Delete(sFilePath); System.IO.File.Move(sNewFilePath, sFilePath); System.Runtime.InteropServices.Marshal.ReleaseComObject(oJRO); oJRO = null; sCompactError = string.Format("{0} database file successfully compacted.", sFilePath); } catch { } }
و یه کد دیگه هم دارم اما کلاس JRO نمیتونم پیدا کنم
using System; using System.IO; namespace iCode_Library.NET { /// <summary> /// Summary description for CompactDB. /// </summary> public class CompactDB { JRO.JetEngine jro; public CompactDB() { jro = new JRO.JetEngine(); } public bool CompactDBAccess2000(string dbDirectory, string dbFile) { try { string backupFileName = "backup.mdb"; string sourceConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbDirectory + dbFile; string destConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbDirectory + backupFileName + ";Jet OLEDB:Engine Type=5"; jro.CompactDatabase(sourceConn, destConn); FileInfo fi = new FileInfo(dbDirectory + backupFileName); fi.CopyTo(dbDirectory+dbFile, true); fi.Delete(); return true; } catch(Exception msg) { System.Windows.Forms.MessageBox.Show(msg.Message); return false; } } } } //CALL compactAccess2000DB(GlobalStuff.ProgramDirectory + @"\DB\", "iCodeLibrary.mdb"); //FUNCTION THAT CALLS CLASS public void compactAccess2000DB(string dbDirectory, string dbFile) { try { CompactDB cpDB = new CompactDB(); cpDB.CompactDBAccess2000(dbDirectory, dbFile); MessageBox.Show("Compacting the database complete", "Compacting complete", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch(Exception) { MessageBox.Show("Failed to compact the database", "Compacting failed", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)