『壹』 C#開發中如何將sql資料庫中的表導入到access資料庫還有access資料庫如何通過代碼來壓縮和解壓
C#讀取 SQL Server 數絕悶悶據庫表的例子
http://hi..com/wangqing999/blog/item/b79ea1a9c2775f064a36d672.html
C# 寫入 Access 資料庫表的並彎罩昌例子
http://hi..com/wangqing999/blog/item/4c69018b16e830f5513d92e7.html
『貳』 C# 如何實現Access資料庫文件(.accdb)的壓縮和修復拜託各位大神
C#壓縮Access資料庫 1、 /// <summary> /// connectionString 資料庫連接字元串孝鋒飢 /// mdwfilename 資料庫絕對巧返路徑+資料庫名 /// </summary> /// <param name="connectionString"></param> /// <param name="mdwfilename"></param> static void CompactAccessDB(string connectionString, string mdwfilename) { object[] oParams; object objJRO = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine")); oParams = new object[] {connectionString, "Provider=Microsoft.Jet.OLEDB.4.0;Data;Source=C:\\temp.mdb;Jet OLEDB:Engine Type=5"}; objJRO.GetType().InvokeMember("CompactDatabase",System.Reflection.BindingFlags.InvokeMethod, null,objJRO,oParams); System.IO.File.Delete(mdwfilename); System.IO.File.Move("C:\\temp.mdb", mdwfilename); System.Runtime.InteropServices.Marshal.ReleaseComObject(objJRO); objJRO = null; } 2./// JetEngine x = new JetEngine(); x.CompactDatabase(connectstring, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp.mdb;Jet OLEDB:Engine Type=5;User ID=Admin;Password=;");//第二個參數是用來存放壓縮後資料庫的 System.IO.File.Delete(mdbfilename); System.IO.File.Move("C:\\temp.mdb", mdbfilename); /// 兩種方法,第一種比較難理解,第二種添加dll,簡單易用。我在程序中用的第一 種方法,避免了添加dll但是需要從資料庫連接字元串里解析出mdwfilename。此 外,在調用上述方法前都得先關閉資料庫連接,因為畢竟都得delete舊資料庫的 。 另外,你可以參考基稿 http://www.codeproject.com/KB/database/mdbcompact_latebind.aspx 或者到csdn里多問問。
『叄』 教你如何解決access資料庫連接錯誤
access資料庫連接錯誤解決辦法步驟一:請檢查conn.asp中的連接字元是否正確,如果沒有錯誤,還提示資料庫連接出錯,請往下看access資料庫連接錯誤解決辦法步驟二:把資料庫下載到本地(默認資料庫
database/#newasp.mdb),用ACCESS打開,壓縮修復資料庫(打開ACCESS
--
工具
--
資料庫實用工具
--
壓縮和修復資料庫);然後重新上傳access資料庫連接錯誤解決辦法步驟三:如果以前操作無誤,照樣出現資料庫連接出錯,那麼就是許可權問題了,下面以2003為例請對C:\WINDOWS
目錄給
users用戶加上讀取許可權(千萬不要給完全許可權,有讀的許可權就行了),加上許可權後,如果資料庫連接正確就OK了如果問題還沒有解決,請查看:C:\WINDOWS\Temp
目錄許可權,給users
用戶加上特別的許可權,其它許可權都可以去掉。可能你不知道這個特別許可權不知道怎麼加,方法如下:選擇temp目錄--右鍵--屬性--安全--添加--高級--立即查找--選擇Users用戶--確定返回到安全選項,選擇Users用戶
--
高級
--
選擇Users「編輯」
--
選擇如下許可權,其它許可權全部取消以上詳細的為大家介紹了解決access資料庫連接錯誤的辦法,希望能給大家帶來幫助。
『肆』 c語言如何使用access資料庫
1、C/C++與資料庫交互,像 mssql/ mysql / oracle 等,一般都有成熟的第三方庫,這些庫裡面無非就是封裝了與資料庫通訊的方式和通訊協議搜一下要用的資料庫相關的 API 文檔,會說得很清楚任何文件都是二進制數據,關鍵是數據存儲的組織方式通用擴展名的文件,像gif/doc/jpg/wav,格式都是固定的。
2、舉個例子,連接SQL:
// 打開資料庫
strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s"), m_strUnEntryptMdbFilePath,m_strMDBPassword);
// 創建連接
HRESULT hr = m_pConnection.CreateInstance(_uuidof(Connection));
_ConnectionPtr m_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified);
// 聲明表單指針
_RecordsetPtr pBandRecordset;
pBandRecordset.CreateInstance(__uuidof(Recordset));
// 執行語句
CString strSQL(L"SELECT * FROM [Band]");
m_pConnection->Execute((LPCTSTR)strSQL,NULL,0);
// 提取某一項 例如BandInfo
int iBandInfo = wcscmp(colum, L"BandInfo");
while(!recordsetPtr->adoEOF)
{
var = recordsetPtr->GetCollect(colum);
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
recordsetPtr->MoveNext();
}
『伍』 教你如何解決access資料庫連接錯誤
步驟一:請檢查conn.asp中的連接字元是否正確,如果沒有錯誤,還提示資料庫連接出錯,往下看access資料庫連接錯誤。
步驟二:把資料庫下載到本地(默認資料庫 database/#newasp.mdb),用ACCESS打開,壓縮修復資料庫(打開ACCESS -- 工具 -- 資料庫實用工具 -- 壓縮和修復資料庫);然後重新上傳access資料庫連接錯誤。
步驟三:如果以前操作無誤,照樣出現資料庫連接出錯,那麼就是許可權問題了需要更改許可權。
『陸』 怎麼解決ACCESS資料庫太大造成運行慢的問題
1.時候在使用Access文件的時候,隨著增刪改的不斷的連續,會導致文件越來越大。即使手動刪除或者使用delete語句刪除了大量的數據記錄,會發現文件的大小依然沒有減掉,而且隨著你再往裡寫數據,又會增大。
2.產生這個現象的原因跟Access本身的機制有關,具體也不清楚,好像是有什麼歷史記錄還是什麼存儲碎片。ACCESS資料庫在進行刪除操作後,並不從該資料庫中把數據清除掉,而是刪除其索引相關的東西,雖然顯示不出來,但是那些東西還是在文件中存在的,所以會引起ACCESS資料庫文件越來越大。即使是我們不通過代碼來訪問access文件,而只是通過用戶界面訪問,隨著文件的增大,也會帶來一系列的問題。其症狀包括:對象可能打開得更慢,查詢可能比正常情況下運行的時間更長,各種典型操作通常似乎也需要使用更長時間。更何況如果在網站應用中,採用的是Access作為資料庫的話,這里就有了性能上的問題。文件越來越大,會影響查詢的速度,而且ACCESS是採用獨占方式工作的,也就是說一次只能一個進程打開這個資料庫執行操作,如果是多個用戶的話就要"排隊"了,所以ACCESS資料庫如果變為很大的話,執行一個查詢時間就會變長,而進程"排隊"的等待時間也就會變得很久,專業型的資料庫就不同,可以同時接收多個並發的訪問,可以採用SQL資料庫或其它大型並發數很強的資料庫。
3.但是很多時候我們是需要Access文件,往不同的地方拷貝的,比如說,一個Server上生成了一個Access文件,需要拷貝到另外的Server上,而且Server間如果網速不是很好的話,會需要很長的時間來傳輸這個文件。所以這時候我們希望這個文件在內容不變的前提下,越小越好。所以我們可以去除這個Access的冗餘信息。
4.Office Access本身就有這種功能,我們可以通過菜單找到這個工具,然後單擊這個圖標手動壓縮。
5.執行以下這幾句代碼就可以了。
首先引用C:Program FilesCommon FilesSystemadomsadox.dll,該DLL包含ADOX命名空間;
接著引用C:Program FilesCommon FilesSystemadomsjro.dll,該DLL包含JRO命名空間
注意:如,導入dll不成功,手動把com組件 導入為 .net組件,在用vs.net工具導入
///壓縮修復ACCESS資料庫,mdbPath為資料庫絕對路徑
public void Compact(string mdbPath)
{
if (!File.Exists(mdbPath)) //檢查資料庫是否已存在
{
throw new Exception("目標資料庫不存在,無法壓縮");
}
//聲明臨時資料庫的名稱
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;
//定義臨時資料庫的連接字元串
string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + temp;
//定義目標資料庫的連接字元串
string mdbPath2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=l1epc2";
//創建一個JetEngineClass對象的實例
JetEngineClass jt = new JetEngineClass();
//使用JetEngineClass對象的CompactDatabase方法壓縮修復資料庫
jt.CompactDatabase(mdbPath2, temp2);
//拷貝臨時資料庫到目標資料庫(覆蓋)
File.Copy(temp, mdbPath, true);
//最後刪除臨時資料庫
File.Delete(temp);
}
『柒』 優化Microsoft Access提高速度
摘要
這篇文章介紹了在設計、編寫和實現Microsoft Access 資料庫應用程序時為保證擁有最高速度而需要注意的幾點。
介紹
作為一名資料庫程序員,你的主要任務是讓你的用戶能快速地選擇、管理和訪問他們所需要的信息。其他的工作幾乎都是一成不變的,只要你的資料庫應用程序執行速度越快,你的程序效率越高。這篇文章的目的就是突出各種不同的技巧和策略,通過優化程序來提高速度,讓你的Microsoft Access 資料庫應用程序的效率更高,這樣也可以幫助你完成作為一名資料庫開發者的主要使命。
硬體
瞄準速度問題的根本
為了提高你的資料庫程序的速度,自然而然地你會想到去注意影響速度最基本的幾個部分,我們將從處理這幾個部分著手。在你力圖提高你的資料庫程序性能的時候,你的程序所運行的硬體平台將是唯一的決定因素彎差。顯而易見,實現優化的第一條原則應該是較快的硬體=較快的資料庫_比_PU和RAM是這個等式的核心所在。相信你一定注意到Microsoft Access 所聲明的,要達到一個令人滿意的性能,至少需要8MB的RAM和一個80486的CPU。一般情況下,用戶注意到這一點是理所應當的,但我卻見過許多用戶為他們的Microsoft Access 的執行速度而感到沮喪,當我問及他們使用什麼機器運行此程序時,他們告訴我是一台80386,並且是在運行一台伺服器上的一個MSACCESS.EXE。所以,在相信你的汪跡用戶通過下面的方法固然能提高其程序性能的同時,始終需要強調的仍然是,在Microsoft Access 執行過程中,硬體才是關鍵的問題。
有效的磁碟訪問
假定已經有了一個令人滿意的硬體配置,下面讓我們討論一下如何才能提高Microsoft Access 在此平台上的運行速度。就這個問題,對你的資料庫程序而言,影響其性能的第二位因素就是磁碟訪問了。在執行過程中,對物理磁碟的訪問總是一個速度的瓶頸(與訪問存儲在 RAM中的數據相比較而言),所以,你應該盡量減少對磁碟的訪問。然而,由於你的應用程序總是要和一些磁碟或其他一些物理設備打交道,所以,你的目標應該是保證所有的磁碟訪問都盡可能有效。要實現這一點,方法是經常整理你的磁碟數據碎片,整理你的資料庫所在的磁碟驅動器以及所有你執行你的資料庫程序時要涉及的磁碟驅動器,而且你還應提醒你的用戶定期清理磁碟碎片,以此保證磁碟訪問一直有效。這將最大程度地減少在對物理磁碟進行讀寫而花費的時間,盡管這些讀寫是不可避免的,同時優化了整個體系的性能。
使RAM最大化/對磁碟訪問的頻率最小化
下一個主題是使你的資料庫程序與物理磁碟驅動器打交道的頻率最小。要做到這一點關鍵是盡可能多的釋放RAM空間給你的應用程序使用。要實現這一點,你需要做到以下幾點:
增加最大緩沖區的尺寸
首先涉及到你對最大緩沖區尺寸的設置。最大緩沖區的尺寸指的是Microsoft Access作為困鬧並內部存儲空間而保留的RAM的數目。存儲空間越大,用戶需求的數據能在RAM中找到可能性越大,同時減少了對物理磁碟的訪問頻率。Microsoft Access 需要的最小緩沖區是512KB,如果你的硬體系統有多於4MB的RAM,那麼你就可以為Microsoft Access 多分配一些供其使用(這樣也增加了系統的性能)。要做到這一點,只需要在MSACCESS.INI(在你的windows目錄下)文件中增加對最大緩沖區的設置,使用你的文本編輯器,例如記事本,在此文件中找到 [Option] 段,在其中加這樣一句話:
MaxBufferSize = xxxxx
這其中的xxxxx即是為你的應用程序對存儲空間分配而作的新設置(例如,設置MaxBufferSize=2048將為Microsoft Access分配2MB的緩沖區空間)。那麼,你究竟應該分配多少才算合適呢?除了「盡可能多」,其他的還真難說。你需要手動地調節這個設置,同時需要試著讓你的硬體都能提供以下條件:1)不能妨礙用戶同時正在運行的程序,2)不會影響其自身底層操作系統的運行效率(你可能會在程序啟動時想通過.INI文件查看一下Microsoft Access自身的配置,因此,任何對MSACCESS.INI文件的修改都將只能在下一次Microsoft Access啟動時才能奏效,而對現在正在運行的Microsoft Access程序沒有任何的影響)。
避免裝載Wizards
為了釋放更多的內存以供Microsoft Access使用,另一個你可以採取的步驟是:如果你不使用Wizards,那麼就不要裝載它。你可以打開MSACCESS.INI文件,找到[libraries]部分,在「wizards.mdb=ro」這一句之前加一個分號,這樣就避免了自動載入Wizards。這樣做將能夠釋放315B的RAM提供給Microsoft Access以作己用,這樣做的好處不僅在於提高了運行時間的性能,同時使每個應用程序平均減少了大約10秒的安裝時間。
解除牆紙/背景點陣圖
解除標准windows牆紙背景可以釋放RAM中任何一處25K到350K的空間。解除復雜的點陣圖將釋放更多的內存空間。
創建永久交換文件
創建一個永久交換文件(相對於臨時文件而言)將增加你額外的性能。關於這一點,你可以求助於關於這方面的幫助文檔,它將指導你在運行資料庫應用程序的機器上創建這一文件。
到現在為止,我們已經解決了有關硬體平台、最大的磁碟訪問效率的問題,並且為你的應用程序增加了有效的RAM存儲空間,接下來讓我們轉向優化應用程序本身。
Microsoft Access自身特點
壓縮、壓縮
要保證經常性的壓縮你的程序代碼。當你在開發和使用Microsoft Access資料庫時,你要經常性地增加和刪除數據、代碼等等。現在的問題是Microsoft Access並不能有效地釋放已分配的但被刪除的對象空間,這將意味著即使你刪除了一個對象,而這個對象仍然在你的資料庫中占據空間。壓縮資料庫將迫使Microsoft Access真正刪除這些對象並回收其占據的空間,從而使得你的資料庫盡量小但卻更有效。我曾把逐字逐句查詢的平均時間減少了30%——50%,而做到這一點僅僅是通過去壓縮那些由於經常使用又缺乏壓縮而變得過度膨脹的資料庫程序,因此,在運行程序的過程中,不要忽視壓縮過程的重要性。正如你要定期清除硬碟數據碎片一樣,你和你的用戶也應當定期壓縮資料庫來保證它始終最有效地運行。
只用代碼
你可能希望通過宏操作來搭建一個應用程序的模型,一旦你開始優化你的程序的最終性能,一定要把所有的宏重新寫成代碼。這主要是因為Microsoft Access代碼要比宏運行得快的多。但遺憾的是有三個宏操作你不能將他們改寫成代碼,這三個宏是Autokeys、Autoexec和Addmenu操作,這三個宏在Microsoft Access中沒有相應的等價類,因此你只能被迫使用他們。不過,你可以克服Autoexec的限制,只需要定義Autoexec為調用你的Access Basic Autoexec函數。
優化數據類型聲明
當你在你的代碼中聲明數據類型時,你應該試著盡可能精確。因為若是一個變數的類型(如果沒有特別聲明,預設為可變類型)非常靈活自由的話,那麼這種類型同時也將是最浪費內存的一種類型。這樣一來,如果你知道check Balance這個變數不需要超過4位小數精度的話,那麼就把它定義成確定類型而不是可變類型。對你的過程函數的定義同樣也可以如此操作(比如說,把函數PostCredit()聲明為整形,而不是Function PostCredit())。請注意這樣一個事實,如果你估計一個變數將會被處理成一個空值,那麼你需要去把它定義成一個可變類型而不是一個確定的嚴格的數據類型,否則你會得到一個錯誤信息。同樣地,要注意整形除法和浮點除法之間的差別。
經常使用From/Report變數
在你的程序中,你需要保證你能提前解決盡可能多的查詢工作。這意味著什麼呢?舉個例子來說明:如果你想在代碼中查閱一個名為[NetPrice]的文本框,你可以使用這樣一條語句:
Mytemprariable=Forms![Customer Invoice]![Net price]
對於這條指令,Microsoft Access首先在Forms對象里搜索名為[Customer Invoice]的表,一旦它找到這張表,Microsoft Access接下來尋找名為[NetPrice]的控制,並進行正確的操作。從這個例子可以看出,Microsoft Access經過兩次查詢最終確定我們指定的控制。如果你想在同一程序(函數或者子函數)中再次查詢[Customer Invoice]表中任一控制,你可以刪除可能會在下次出現的多餘語句,而只使用如下語句:
Dim F as form
Set F = Forms![Customer Invoice]
現在,你的Form變數將自動指向Form[Customer Invoice],允許Microsoft Access 避免每次在你需要查找[Customer Invoice]表中任一對象時,都要把資料庫的Form對象中全部搜索一次。為了查閱控制[NetPrice],你只需要簡單地使用下面的語句:
Mytempvariable=F![NetPrice]
你也可以對Report對象作相同的操作(比如,set R=Reports![MyReport])。當你在一個函數中僅僅只對一個Form或Report訪問一次,你可能在速度性能方面得不到什麼太大得好處,但是一旦你開始在同一個Form或Report中進行的訪問操作超過一次,你將會看到明顯的時間減少。於是,通過使Microsoft Access避免作多餘的查閱,你將大大地提高你程序的速度。
在可以應用的地方使用windows函數
無論何時,只要相關,總是可以用一個windows函數調用來代替Access Basic代碼執行同一個操作。這樣你將節省開發時間,因為windows函數調用是已經完成編碼並經過優化,同時也因為它們是用C語言編寫的(機器可執行),而Access Basic代碼則要被編譯成P代碼形式,同時需要在執行時一行一行地解釋。一個最普通的例子是custom.ini設置。你可以使用Access Basic文件函數去得到一個自由文件指針,打開文件,讀/寫文件,然後關閉它。但是如果你完全可以簡單地使用GetPrivateProfileString和WritePrivateProfileString函數來實現,它們既快且已經編碼優化隨手可用,你為什麼還要自尋煩惱呢?(參考:「Enhanced Microsoft Access: Using the Win16 API」)
你的Microsoft Access資料庫應用程序運行速度越快,你就能更好地完成你的任務,也就是向你的用戶提供最有效的選擇、管理、發送他們的數據的能力。我真誠希望以上這些小技巧能協助你達到這個目標。
『捌』 c語言連接access
如果是純昌野C語鏈辯言的話需要引用頭文件。
引用iostream.h以及msado15.dll方可進行棚迅缺連接ACCESS資料庫的操作。
代碼量比較大,這里貼不出來。需要的話可以聯系我。
『玖』 ACCESS問題
修復ACCESS資料庫的幾種常見方法:
技術支持部在日常工作中經常會碰到因非正常退出、網路不穩定或病毒等原因造成的Access資料庫損壞。損壞了的Access資料庫會造成軟體運行不穩定,出現各種運行錯誤,為解決這類問題就必須對Access資料庫進行修復。
修復Access資料庫,我們一般使用微軟Office 97中帶的Access 97對資料庫進行修復和整理。Access資料庫被損壞分以下幾正蠢種情況:1、嚴重損壞;2、輕度損壞;3、有些表被損壞或有些表的部分記錄被損壞。下面就分情況介紹解決辦法。
1、使用游清塌Access97打不開資料庫、系統提示"不可識別的資料庫格式"或"不是該表的索引"等信息,這樣的資料庫都是損壞比較嚴重的。損害嚴重的資料庫一般來說都是無法修復的,只有恢復備份了,好在這種情況比較少見。
2、如果資料庫損壞的不嚴重,只需要使用Access 97菜單上的「修復資料庫」和「壓縮資料庫」就可以把資料庫修復好。因為資料庫輕微損壞的時候,一般也不會導致軟體出什麼問題,所以也不會神圓引起人的注意,只有當資料庫的某一個或幾個表損壞了的時候,才會使軟體變得不穩定,所以這種情況才是我們最常遇到的。
3、如何確定資料庫中哪幾個表有問題呢,我們首先利用Access 97建立一個空資料庫,利用系統提供的「引入資料庫」功能,選擇目標資料庫所有的表進行引入,Access 97當引入到有問題的表時系統會提示一些錯誤信息,把這個表的名字記下來以備以後修復時使用。
接下來利用Access97打開有問題的資料庫,准備修復表。修復損壞的表的方法依照表損壞程度不同而不同,下面分情況介紹處理的辦法:
一、表損壞的非常嚴重,表現為無法打開表,系統提示「Microsoft jet 找不到對象」、「沒有讀寫許可權」或「不可識別」等信息。
處理方法:這種表的已經損壞得非常嚴重了,一般無法修復。如果這個表不很重要或通常情況下表的內容為空的話,例如「常用憑證表」、「科目共享鎖定表」或「憑證共享鎖定表」,我們可以通過引入的方法把其他資料庫的表引入,然後把有問題的表刪除即可。
二、表中有幾行內容非常混亂或欄位內標有「#已刪除」字樣,但當要刪除這些記錄時就會出現錯誤信息不許刪除。
處理辦法:既然不讓刪除這些記錄,我們可以通過使用SQL語句把沒有問題的記錄復制到一個新的表中,然後把老表刪除把新表的名字改過來即可。例如「憑證及明細賬表GL_ACCVOUCH」中有錯誤記錄有無法刪除,我們可以使用如下SQL語句把好的記錄復制到GL_ACCTEMP中:
SELECT GL_ACCVOUCH.* INTO GL_ACCTEMP
FROM GL_ACCVOUCH WHERE {篩選的條件}
然後刪除表GL_ACCVOUCH,再把表GL_ACCTEMP的名字改為GL_ACCVOUCH即可解決問題。
修復ACCESS資料庫的注意事項,首先,我們在修復資料庫前一定要做好備份,以防數據丟失或損壞;有一些資料庫中有RELATION(關系)來維護數據的一致性,但當資料庫異常後相關表的RELATION也就丟失了,在修復好資料庫後一定要把RELATION再聯好,有些軟體可以自動修復RELATION,比如用友公司的ERP8.XX系列產品的資料庫可以通過把表accinformation中的[cSysid]='AA' and [項目號]='99'的記錄,把[設置值]和[預設值]改為'8.0A0',重新進入系統時,系統會自動升級並重建索引。
以上回答你滿意么?
『拾』 如何在c程序中調用access資料庫
c語言不能連接資料庫,只能用文件保存數據;
我在學習的時候也曾遇到過這樣的問題,請教老師,老師告訴我C語言主要用來開發系統的,還有就是用來開發游戲的。一般用文件保存數據。不會用到資料庫;
要用資料庫的語言有VB,java,c#,Dephi等等