C 壓縮和修復Access資料庫

2021-04-23 11:24:28 字數 3675 閱讀 7418

介紹

下面這段c# **可以用來壓縮和修復access資料庫,不管它是乙個簡單的".mdb"access資料庫還是乙個".mdw"網路共享資料庫,這個過程和你在用ms access應用程式中使用的"工具-資料庫實用工具-壓縮和修復"時執行的操作完全一樣.例項**使用了"遲繫結"(執行中在記憶體中建立com物件),這樣就不需要在工程中加入com引用了,也不需要在pc上安裝ms access應用程式.只需要乙個jet引擎(jet引擎包含在mdac安裝包中,在windows nt4以後的版本中,系統已經自帶了這個引擎).

c#操作access資料庫的背景

1. 例項**

只需呼叫compactaccessdb函式即可壓縮和修復目標資料庫.

2. 引數:

connectionstring – 用來連線到access資料庫.

mdwfilename –要壓縮的mdb檔案的全名(路徑+檔名).

由於jet引擎的限制,執行此方法壓縮access資料庫會把結果生成為乙個新檔案,所以我們要還需要把這個新的access檔案拷貝到目的位置覆蓋原來未壓縮檔案.

當呼叫此方法時請確認被壓縮資料庫無開啟的連線.

c#操作access資料庫 **如下:

程式**

/// mbd compact method (c) 2004 alexander youmashev

/// !!important!!

/// !make sure there's no open connections

/// to your db before calling this method!

/// !!important!!

///

///

connection string to your db

///

full name

/// of an mdb file you want to compress.

public static void compactaccessdb(string connectionstring, string mdwfilename)

;//invoke a compactdatabase method of a jro object

//pass parameters array

objjro.gettype().invokemember("compactdatabase",

system.reflection.bindingflags.invokemethod,

null,

objjro,

oparams);

//database is compacted now

//to a new file c://tempdb.mdw

//let's copy it over an old one and delete it

system.io.file.delete(mdwfilename);

system.io.file.move("c://tempdb.mdb", mdwfilename);

//clean up (just in case)

system.runtime.interopservices.marshal.releasecomobject(objjro);

objjro=null;

}手頭沒有microsoft access,c#如何操作access資料庫?

寫乙個小型程式,手頭沒有microsoft access,如何建立資料庫,一切依然簡單.

首先引用c:/program files/common files/system/ado/msadox.dll,該dll包含adox命名空間;

接著引用c:/program files/common files/system/ado/msjro.dll,該dll包含jro命名空間

注意:如,匯入dll不成功,手動把com元件 匯入為 .net元件,在用vs.net工具匯入

程式**

using system;

using system.io;

using adox; //該命名空間包含建立access的類(方法)--解決方案 ==> 引用 ==> 新增引用 ==> 遊覽找到.dll

using jro; //該命名空間包含壓縮access的類(方法)

public class access

// 可以加上密碼,這樣建立後的資料庫必須輸入密碼後才能開啟

mdbpath = "provider=microsoft.jet.oledb.4.0;data source=" + mdbpath;

// 建立乙個catalogclass物件的例項,

adox.catalogclass cat = new adox.catalogclass();

// 使用catalogclass物件的create方法建立access資料庫

cat.create(mdbpath);

}///壓縮修復access資料庫,mdbpath為資料庫絕對路徑

public void compact( string mdbpath )

//宣告臨時資料庫的名稱

string temp = datetime.now.year.tostring();

temp += datetime.now.month.tostring();

temp += datetime.now.day.tostring();

temp += datetime.now.hour.tostring();

temp += datetime.now.minute.tostring();

temp += datetime.now.second.tostring() + ".bak";

temp = mdbpath.substring(0, mdbpath.lastindexof("//")+1) + temp;

//定義臨時資料庫的連線字串

temp2 = "provider=microsoft.jet.oledb.4.0;data source=" + temp;

//定義目標資料庫的連線字串

mdbpath2 = "provider=microsoft.jet.oledb.4.0;data source=" + mdbpath;

//建立乙個jetengineclass物件的例項

jro.jetengineclass jt = new jro.jetengineclass();

//使用jetengineclass物件的compactdatabase方法壓縮修復資料庫

jt.compactdatabase( mdbpath2, temp2 );

//拷貝臨時資料庫到目標資料庫(覆蓋)

file.copy( temp, mdbpath, true );

//最後刪除臨時資料庫

file.delete( temp );

}/// 備份資料庫,mdb1,源資料庫絕對路徑; mdb2: 目標資料庫絕對路徑

public void backup( string mdb1, string mdb2 )

trycatch( ioexception ixp )

}///恢復資料庫,mdb1為備份資料庫絕對路徑,mdb2為當前資料庫絕對路徑

public void recover( string mdb1, string mdb2 )

trycatch( ioexception ixp )}} 

用C 壓縮和修復Access資料庫

介紹 下面這段c 可以 用來壓縮和修復access資料庫,不管它是乙個簡單的 mdb 還是乙個 mdw 網路共享資料庫,這個過程和你在用ms access應用程式中使用的 工具 資料庫實用工具 壓縮和修復 時執行的操作完全一樣.例項 使用了 遲繫結 執行中在記憶體中建立com物件 這樣就不需要在工程...

C 壓縮Access資料庫

壓縮資料庫 資料庫鏈結 要壓縮的mdb檔案的全名 static void compactaccessdb string dbfilename objjro.gettype invokemember compactdatabase system.reflection.bindingflags.invo...

壓縮access資料庫

遇到乙個問題,使用的是accesss資料庫,在載入資料庫中的資訊的時候,速度特別慢,有時候一次查詢最終會卡15秒左右,然後才能得到結果,跟蹤發現卡的地方在sqlexecdirect中,已經是odbc api了。開啟資料庫看也沒發現啥問題,後來點了access上邊的 壓縮和修復資料庫 工具,資料庫從原...