مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

1212

عضویت از 1394/12/14

پاک کردن کش دیتابیس اکسس

  • شنبه 21 مهر 1397
  • 20:52
تشکر میکنم

سلام

در دیتابیس اکسس اگه مقادیری در دیتابیس درج شده مثلا 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); 
    } 
}  

پاسخ های این پرسش

تعداد پاسخ ها : 0 پاسخ
در حال حاضر هیچ پاسخی ارسال نشده است
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)