




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 MFC運用ADO操作數(shù)據(jù)庫一,數(shù)據(jù)庫訪問技術目前數(shù)據(jù)庫接口問技術主要有DAO,RDO,ODBC,OLE DB和ADOODBC,開發(fā)數(shù)據(jù)庫互連。為數(shù)據(jù)庫開發(fā)提供統(tǒng)一的接口,可以與任何具有ODBC驅(qū)動程序的數(shù)據(jù)庫通信。和其他數(shù)據(jù)庫訪問技術相比,屬于比較底層的數(shù)據(jù)庫接口。只能和關心數(shù)據(jù)庫進行通信,不能訪問非關系數(shù)據(jù)庫。DAO,數(shù)據(jù)訪問對象。基于COM的面向?qū)ο髷?shù)據(jù)庫編程模型。是一組基于Mircrosoft Access Jet引擎的COM自動化接口。直接與Access/Jet數(shù)據(jù)庫通信,通過Jet引擎也可以與其他數(shù)據(jù)庫通信。效率不高。最初是作為ODBC API的抽象,為Visual Basic程序
2、員提供的編程對象。使用ODBC API對數(shù)據(jù)源進行操作。不需要經(jīng)過Jet引擎,比DAO效率高。OLE DB,對象鏈接嵌入數(shù)據(jù)庫。未來數(shù)據(jù)庫訪問的發(fā)展模式。提供COM接口,與其他數(shù)據(jù)庫訪問技術相比,具有更好的健壯性和靈活性,更高的容錯能力。屬于底層訪問技術??梢耘c關系和非關系型數(shù)據(jù)庫進行通信。ADO,ActiveX Data Object。對OLE DB的高層次封裝。簡化了OLE DB,屬于高層的數(shù)據(jù)庫接口。另外同OLE DB相比,能夠使用ADO的編程語言更多。ADO提供一個自動化接口,使VBScript和JavaScript等腳本語言可以使用ADO。二,ADO訪問基礎1引入ADO類型庫 在St
3、dafx.h中使用如下指令引入類型庫: #import c:program filescommon filessystemadomsado15.dll no_namespace rename(EOF,adoEOF) 根據(jù)操作系統(tǒng)的不同,msado*.dll的版本不同,目前最高版本是2.1吧。rename(EOF,adoEOF)是為了防止和別的結束標示重名。 在編譯過程中不用理會下面的編譯警告: warning: unary minus operator applied to unsigned type, result still unsigned 如果不想此警告出現(xiàn),可以在 StdAfx.h
4、文件中加入這樣一行代碼以禁止此警告: #pragma warning(disable:4146) 對于指定ADO版本/如果使用 ADO 2.0 加入下面代碼#import C:Program FilesCommon FilesSystemOle DBmsdasc.dll no_namespace /如果使用 ADO 2.1 加入下面代碼#import C:Program FilesCommon FilesSystemOle DBoledb32.dll no_namespace注:ADO2.0 或 ADO2.1 中,如果其中一個編譯不成功,則用另一個2初始化COM庫 一般中應用程序類初始化函數(shù)中
5、初始化COM庫,當然也可以在別的地方。只要是在使用之前初始化就可以。AfxOleInit(); / 初始化COM環(huán)境上面是MFC環(huán)境下注冊COM的方法,如果非MFC環(huán)境使用方法如下: CoInitialize(NULL); CoUnInitialize();3創(chuàng)建Connection對象并連接數(shù)據(jù)庫 針對鏈接數(shù)據(jù)庫的方法主要有兩種,靜態(tài)鏈接和動態(tài)鏈接。靜態(tài)鏈接:_ConnectionPtr m_pConnection; 在初始化函數(shù)中初始化它。 try hr = m_pConnection.CreateInstance(ADODB.Connection);/創(chuàng)建Connection對象 if(
6、SUCCEEDED(hr) hr = m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb,adModeUnknown);/連接數(shù)據(jù)庫 /上面一句中連接字串中的Provider是針對ACCESS2000環(huán)境的,對于ACCESS97,需要改為 :Provider=Microsoft.Jet.OLEDB.3.51; catch(_com_error e)/捕捉異常 CString errormessage; errormessage.Format(連接數(shù)據(jù)庫失敗!rn錯誤信息:%s,e.ErrorMessa
7、ge(); AfxMessageBox(errormessage);/顯示錯誤信息 /假設數(shù)據(jù)庫名稱test.mdb;數(shù)據(jù)源為test,下面使用不同的方法連接數(shù)據(jù)庫 使用ADO連接ACCESS2000數(shù)據(jù)庫 m_pConnection-Open(Provider=Mircrosoft.Jet.OLEDB.4.0;Data Source=test.mdb,adModeUnknown); 使用ADO連接ACCESS97數(shù)據(jù)庫 m_pConnection-Open(Provider=Mircrosoft.Jet.OLEDB.3.51;Data Source=test.mdb,adModeUnKnow
8、n); 使用DSN數(shù)據(jù)源對任何支持ODBC的數(shù)據(jù)庫進行連接 m_pConnection-Open(Data Source=test;UID=sa;PWD=,adModeUnknown); 不通過數(shù)據(jù)源對SQL SERVER數(shù)據(jù)庫進行連接 m_pConnection-Open(driver=SQL SERVER;Server=127.0.0.1;DATABASE=TEST;UID=sa;PWD=,adModeUnknown); 設置數(shù)據(jù)庫連接超時,需要在Open之前調(diào)用 m_pConnection-ConnectionTimeOut = 30;/秒動態(tài)鏈接:HRESULT hr;IDataSou
9、rceLocatorPtr dlPrompt=NULL;_RecordsetPtr rs=NULL;try / 初始化DataLinks對象 hr=dlPrompt.CreateInstance(_uuidof(DataLinks); if(FAILED(hr) throw(_com_error(hr,NULL); / 建立連接 pConn=dlPrompt-PromptNew(); / 如果 conn 為 NULL if(pConn=NULL) return; / 打開連接 pConn-Open(pConn-ConnectionString,L,L,-1); / 清除列表框 while(m_
10、tblList.GetCount()0) m_tblList.DeleteString(0); / 獲取數(shù)據(jù)庫中表集 rs=pConn-OpenSchema(adSchemaTables); while(!rs-adoEOF) m_tblList.AddString(char*)(_bstr_t)rs-Fields-ItemLTABLE_NAME-Value); rs-MoveNext(); rs=NULL; dlPrompt.Release();catch (_com_error &e) AfxMessageBox(e.ErrorMessage();需要注意的是,在建立工程時,要選上Auto
11、mation選項。(具體情況看)三,ADO的數(shù)據(jù)操作1Recordset對象操作數(shù)據(jù) Recordset對象是操作數(shù)據(jù)最簡單的方法,也比較直接,特別可以直接用SQL語句來進行操作。我本人也最常用Recordset對象。 _RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(ADODB.Recordset);或者直接寫成:_RecordsetPtr pRecordset (ADODB.Recordset);也可以這樣寫:_RecordsetPtr pRecordset;pRecordset.CreateInstance(_uuidof(_R
12、ecordset);注意,如果變量是一個類的實例則用.操作符,若是一個指向?qū)嵗闹羔槃t應使用-操作符。一個變量能通過兩種方式被使用。因為-操作符被重載,允許一個對象實例類似一個接口指針那樣被使用;-操作符返回該指針;而由這個返回的指針訪問_Recordset對象的成員。 如下代碼,獲得表中所有記錄到Recordset對象 CString strSQL = select * from student; m_pRecordset-Open(strSQL,_variant_t(IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,
13、adCmdText); 第一個參數(shù)是要執(zhí)行的SQL字符串,第二個是活動連接 第三個參數(shù)是光標類型。可以取如下值 adOpenUnspecified = -1,/不作特別指定 adOpenForwardOnly = 0,/前滾靜態(tài)光標。這種光標只能向前瀏覽記錄集,比如用MoveNext向前滾動,這種方式可以提高瀏覽速度。但諸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用 adOpenKeyset = 1,/采用這種光標的記錄集看不到其它用戶的新增、刪除操作,但對于更新原有記錄的操作對你是可見的。 adOpenDynamic = 2
14、,/動態(tài)光標。所有數(shù)據(jù)庫的操作都會立即在各用戶記錄集上反應出來。 adOpenStatic = 3/靜態(tài)光標。它為你的記錄集產(chǎn)生一個靜態(tài)備份,但其它用戶的新增、刪除、更新操作對你記錄集來說是不可見的。 第四個參數(shù),鎖定類型。 adLockUnspecified = -1,/未指定 adLockReadOnly = 1,/只讀記錄集 adLockPessimistic = 2,悲觀鎖定方式。數(shù)據(jù)在更新時鎖定其它所有動作,這是最安全的鎖定機制 adLockOptimistic = 3,樂觀鎖定方式。只有在你調(diào)用Update方法時才鎖定記錄。在此之前仍然可以做數(shù)據(jù)的更新、插入、刪除等動作 adLoc
15、kBatchOptimistic = 4,樂觀分批更新。編輯時記錄不會鎖定,更改、插入及刪除是在批處理模式下完成。 第五個參數(shù)。取如下值之一: adCmdText:表明CommandText是文本命令 adCmdTable:表明CommandText是一個表名 adCmdProc:表明CommandText是一個存儲過程 adCmdUnknown:未知 取得某條記錄上某字段的值 _variant_t vValue = m_pRecordset-GetCollect(_variant_t(long)0);/取得第1列的值,從0開始計數(shù),你也可以直接給出列的名稱,如下一行 vValue = m_p
16、Recordset-GetCollect(FieldName);/取得username字段的值 刪除滿足條件的記錄。移動光標到要刪除的記錄。如: m_pRecordset-MoveFirst();/移到首條記錄 m_pRecordset-Delete(adAffectCurrent);/刪除當前記錄 添加記錄 m_pRecordset-AddNew(); m_pRecordset-PutCollect(ID, _variant_t(value); m_pRecordset-Updata(); 修改記錄 m_pRecordset-PutCollect(ID, _variant_t(value);
17、 m_pRecordset-Updata(); 2屬性對于類中的每個操作(或稱方法、屬性調(diào)用),都有一個聲明以保證能直接調(diào)用它(或稱作操作的源形式),以及另一個聲明來調(diào)用這個源操作并在操作失敗時拋出一個COM錯誤。如果操作是一個屬性,那么編譯指示符可以為該操作創(chuàng)建一個可交互的類似VB的語法形式。返回/設置屬性的操作有對應的形式化的名字GetProperty/PutPropert,而設置一個指向某個ADO對象的指針型屬性值時則是PutRefProperty。你將使用如下的形式讀寫屬性的值:variable = objectPtr-GetProperty(); / 讀取屬性的值 objectPtr
18、-PutProperty(value); / 設置屬性的值objectPtr-PutRefProperty(&value); / 設置一個指針型的屬性的值直接使用屬性_declspec(property.)編譯指示符是微軟定義的一個針對C語言的擴展,使一個函數(shù)象一個屬性那樣被使用。這樣你就可以采用如下的語法形式象在使用VB一樣讀寫一個屬性的值: objectPtr-property = value; / 設置屬性的值variable = objectPtr-property; / 讀取屬性的值_declspec(property.)編譯指示符只能針對屬性的讀寫函數(shù)使用,并根據(jù)屬性是否可供讀寫自
19、動生成對應的調(diào)用形式。每個屬性可能有GetProperty, PutProperty,PutRefProperty三個函數(shù),但這個編譯符只能生成其中的兩種交互形式。比如,Command對象的ActiveConnection屬性有GetActiveConnection和PutRefActiveConnection這兩個讀寫函數(shù)。而PutRef-的形式在實踐中是個好的選擇,你可以將一個活動的Connection對象的指針保存在這個屬性中。另一方面,Recordset對象則有Get-, Put-, and PutRefActiveConnection操作,但卻沒有可交互的語法形式。Collectio
20、ns,GetItem方法和Item屬性ADO定義了幾種集合Collection,包括Fields,Parameters,Properties,和Errors。在Visual C+中,GetItem(index)方法返回Collection中的某個成員。Index是一個Variant型的參數(shù),內(nèi)容可以是一個該成員對應的序數(shù),也可以是一個包括其名稱的字符串。_declspec(property.)編譯指示符為Item屬性生成對應于GetItem()方法的直接使用形式(上文提到的可交互的語法形式)。這種形式類似于引用數(shù)組元素時使用的語法形式:collectionPtr-GetItem(index);
21、collectionPtr-Itemindex;舉例說明,要給一個Recordset對象rs中的某個字段賦值,而這個Recordset對象派生于pubs數(shù)據(jù)庫中的authors表。使用Item()屬性訪問這個Recordset的Fields集合中的第三個字段(集合總是從0開始編號,假設第三個字段名為au_fname)。然后調(diào)用Value()方法為該字段賦一個字符串值。rs-Fields-GetItem(2)-PutValue(value); rs-Fields-GetItem(au_fname)-PutValue(value);或者:rs-Fields-Item2-Value = value;
22、rs-Fields-Itemau_fname-Value = value;3. COM特定的數(shù)據(jù)類型 專屬于COM使用的數(shù)據(jù)類型則有:Variant, BSTR, and SafeArray。VariantVariant是一個結構化的數(shù)據(jù)類型,包含了一個成員值及其數(shù)據(jù)類型的表示。Variant可以表示相當多的數(shù)據(jù)類型,甚至另一個Variant, BSTR, Boolean, Idispatch或Iunknown指針,貨幣,日期等等。同時COM也提供了許多方法使數(shù)據(jù)類型間的轉(zhuǎn)換更簡單化。 _variant_t類封裝并管理Variant這一數(shù)據(jù)類型。當ADO的一個方法或?qū)傩砸褂靡粋€參數(shù)時,通常意
23、味著需要一個_variant_t類型的參數(shù)。作為例外的是,有時則會要求操作數(shù)是一個標準的數(shù)據(jù)類型,比如Long或Byte, 或者一個枚舉值。另一個例外是要求操作數(shù)是一個字符串String。BSTRBSTR (Basic STRing)也是一個結構化的數(shù)據(jù)類型,包括了串及串的長度。COM提供了方法進行串的空間分配、操作、釋放。_bstr_t類封裝并管理BSTR這一數(shù)據(jù)類型。一個方法或?qū)傩砸褂靡粋€字符串參數(shù)時,通常意味著需要一個類_bstr_t型的參數(shù)。_variant_t和_bstr_t類的強制類型轉(zhuǎn)換通常當傳遞一個_variant_t或_bstr_t參數(shù)給一個操作時并不需要顯式的類型轉(zhuǎn)換代碼
24、。如果_variant_t或_bstr_t類提供了對應于該參數(shù)類型的構造函數(shù),那么編譯器將會自動生成適當?shù)腳variant_t或_bstr_t值。然而,當參數(shù)模棱兩可時,即對應了多個構造函數(shù)時,你就必須顯式地調(diào)用正確的構造函數(shù)以獲得正確的參數(shù)。比如,Recordset:Open方法的函數(shù)聲明如下: HRESULT Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Option
25、s );其中參數(shù)ActiveConnection就是針對一個variant_t型變量的引用,它可以是一個連接串或者一個指向已打開的Connection對象的指針。正確的_variant_t型參數(shù)會被構造,無論你傳遞的是一個類似DSN=pubs;uid=sa;pwd=;這樣的字符串,或者是一個類似(IDispatch *) pConn的指針?;蛘吣氵€可以顯式的編寫_variant_t(IDispatch *) pConn, true)這樣的代碼來傳遞一個包含指針的_variant_t變量。這里的強制類型轉(zhuǎn)換(IDispatch *)避免了可能調(diào)用IUnknown接口構造函數(shù)的模棱兩可性。雖然很少
26、提及但特別重要的是,ADO總是一個IDispatch接口。任何被傳遞的被包含在Variant中的指針都必須被轉(zhuǎn)換為一個IDispatch接口指針。最后需要說明的是構造函數(shù)的第二個邏輯參數(shù)是可選擇的,它的缺省值是True。這個參數(shù)將決定Variant的構造函數(shù)是否調(diào)用內(nèi)嵌的AddRef()方法,并在完成ADO的方法或?qū)傩哉{(diào)用后是否自動調(diào)用_variant_t:Release()方法SafeArraySafeArray也是一種結構化的數(shù)據(jù)類型,包含了一個由其它數(shù)據(jù)類型的數(shù)據(jù)元素組成的數(shù)組。之所以稱之為安全的數(shù)組是因為它包含了每一維的邊界信息,并限制在邊界內(nèi)進行數(shù)組元素的訪問。一個方法或?qū)傩砸褂没?/p>
27、者返回一個數(shù)組時,通常意味著是一個SafeArray數(shù)組,而非一個本地化的C/C+數(shù)組。比如,Connection對象的OpenSchema方法的第二個參數(shù)需要一個由Variant值組成的數(shù)組。這些Variant值必須作為一個SafeArray數(shù)組的元素進行傳遞。而這個SafeArray數(shù)組本身又被作為一個Variant進行傳遞。更進一步的,F(xiàn)ind方法的第一個參數(shù)是一個指向一維SafeArray數(shù)組的Variant;AddNew方法的可選的第一與第二個參數(shù)也是一個一維的SafeArray數(shù)組;GetRows方法的返回值則是一個包含二維SafeArray數(shù)組的Variant。以下的代碼演示了如
28、何通過一個_variant_t使用一個SafeArray數(shù)組。注意注釋對應了編碼的步驟。1再一次的,TESTHR()內(nèi)置函數(shù)被定義以利用預存的錯誤處理機制。2如果你只需要一個一維數(shù)組,你可以使用SafeArrayCreateVector,而非SAFEARRAYBOUND聲明與SafeArrayCreate函數(shù)。下面的代碼使用了SafeArrayCreate: SAFEARRAYBOUND sabound1; sabound0.lLbound = 0; sabound0.cElements = 4; pSa = SafeArrayCreate(VT_VARIANT, 1, sabound);3枚
29、舉常量adSchemaColumns定義的模式,決定了與TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME和COLUMN_NAME四列相聯(lián)系。為此,一個有四個Variant元素的數(shù)組被創(chuàng)建。而對應于第三列TABLE_NAME的值被設置。由若干列組成的返回的Recordset只是對應的所有列的一個子集,并且每一行的值保持了一一對應。4熟悉SafeArrays的人也許會對退出前沒有調(diào)用SafeArrayDestroy()感到驚奇。實際上,在這種情況下調(diào)用SafeArrayDestroy()會導致一個運行時的異常發(fā)生。這是因為vtCriteria的析構函數(shù)會在_varia
30、nt_t超出使用范圍時調(diào)用VariantClear(),從而釋放SafeArray。只調(diào)用SafeArrayDestroy,而沒有手動清除_variant_t,將會導致析構函數(shù)試圖去清除一個無效的SafeArray指針。如果要調(diào)用SafeArrayDestroy(),那么代碼應該象這樣: TESTHR(SafeArrayDestroy(pSa); vtCriteria.vt = VT_EMPTY; vtCriteria.parray = NULL;實際更像是讓_variant_t管理SafeArray。完整的代碼如下:#import c:Program FilesCommon FilesSys
31、temADOmsado15.dll no_namespace rename(EOF, EndOfFile)#include/ Note 1inline void TESTHR( HRESULT _hr ) if FAILED(_hr) _com_issue_error(_hr); void main(void) CoInitialize(NULL); try _RecordsetPtr pRs(ADODB.Recordset); _ConnectionPtr pCn(ADODB.Connection); _variant_t vtTableName(authors), vtCriteria;
32、long ix1; SAFEARRAY *pSa = NULL; pCn-Open(DSN=pubs;User ID=sa;pwd=;Provider=MSDASQL;, , , adConnectUnspecified);/ Note 2, Note 3 pSa = SafeArrayCreateVector(VT_VARIANT, 1, 4); if (!pSa) _com_issue_error(E_OUTOFMEMORY);/ 為第三個元素賦值TABLE_NAME(索引值2). ix0 = 2; TESTHR(SafeArrayPutElement(pSa, ix, &vtTableN
33、ame);/ 由于Variant沒有SafeArray的構造函數(shù),所以手工設置Variant的數(shù)據(jù)類型和值。 vtCriteria.vt = VT_ARRAY | VT_VARIANT; vtCriteria.parray = pSa; pRs = pCn-OpenSchema(adSchemaColumns, vtCriteria, vtMissing); long limit = pRs-GetFields()-Count; for (long x = 0; x GetFields()-Itemx-Name);/ Note 4 pRs-Close(); pCn-Close(); catch
34、 (_com_error &e) printf(Error:n); printf(Code = %08lxn, e.Error(); printf(Code meaning = %sn, (char*) e.ErrorMessage(); printf(Source = %sn, (char*) e.Source(); printf(Description = %sn, (char*) e.Description(); CoUninitialize();利用(IDispatch *)轉(zhuǎn)換ADO對象的指針類型1在一個Variant中顯式地封裝一個活動的Connection對象,然后用(IDisp
35、atch *)進行類型轉(zhuǎn)換確保正確的構造函數(shù)被調(diào)用。同時明確地設置第二個參數(shù)為缺省的true,使該對象的引用計數(shù)在Recordset:Open操作完成后仍得到正確的維護。2表達式(_bstr_t)不是一個類型轉(zhuǎn)換,而是一個_variant_t的操作符,用以從中提取一個_bstr_t字符串。表達式(char*)也不是一個類型轉(zhuǎn)換,而是一個_bstr_t的操作符,用以從中提取封裝在_bstr_t中的字符串的指針。下面這些代碼演示了_variant_t和_bstr_t的一些常見操作。#import c:Program FilesCommon FilesSystemADOmsado15.dll no_
36、namespace rename(EOF, EndOfFile)#includevoid main(void) CoInitialize(NULL); try _ConnectionPtr pConn(ADODB.Connection); _RecordsetPtr pRst(ADODB.Recordset); pConn-Open(Provider=sqloledb;Data Source=a-tima10; Initial Catalog=pubs;User Id=sa;Password=;, , , adConnectUnspecified);/ Note 1 pRst-Open( au
37、thors, _variant_t(IDispatch *) pConn, true), adOpenStatic, adLockReadOnly, adCmdTable); pRst-MoveLast();/ Note 2 printf(Last name is %s %sn, (char*) (_bstr_t) pRst-GetFields()-GetItem(au_fname)-GetValue(), (char*) (_bstr_t) pRst-Fields-Itemau_lname-Value); pRst-Close(); pConn-Close(); catch (_com_er
38、ror &e) printf(Description = %sn, (char*) e.Description(); :CoUninitialize();4. COM出錯處理在COM中,大多數(shù)的操作總是返回一個HRESULT值說明該函數(shù)是否被成功完成。編譯指示符#import為所有源方法和屬性提供了封裝好的代碼并檢查返回的HRESULT值。如果HRESULT指示失敗,這些封裝代碼將會通過調(diào)用以HRESULT為參數(shù)的_com_issue_errorex()拋出一個COM錯誤。COM錯誤對象將在try-catch塊中被捕獲(出于效率的考慮,實際捕獲的是一個_com_error對象的引用指針)。記住,由ADO操作失敗產(chǎn)生的錯誤才是ADO錯誤。由下層提供者返回的錯誤以Connect
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年環(huán)境污染治理行業(yè)投資研究分析及發(fā)展前景預測報告
- 減速機蝸桿行業(yè)市場發(fā)展及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年顯示器外殼項目可行性研究報告
- 2025年非標壓力容器項目可行性研究報告
- 通化市房地產(chǎn)分析報告
- 居家養(yǎng)老服務中心建設可行性研究報告建議書申請備案
- 年產(chǎn)25000噸硫酸鋅可行性研究報告建議書
- 2025年中國第三方移動支付市場前景預測及投資規(guī)劃研究報告
- 山西雙氧水項目投資分析報告模板參考
- 文獻綜述樣本
- 白城2025年吉林大安市事業(yè)單位面向上半年應征入伍高校畢業(yè)生招聘5人筆試歷年參考題庫附帶答案詳解
- 2025年市婦聯(lián)執(zhí)委會議上的工作報告
- 安全生產(chǎn)事故調(diào)查與案例分析(第3版)課件 呂淑然 第5、6章 事故案例評析、相關法律法規(guī)
- 2024-2025學年人教版數(shù)學六年級下冊第二單元百分數(shù)(二)(含答案)
- 2024年湖南鐵路科技職業(yè)技術學院高職單招語文歷年參考題庫含答案解析
- 祖沖之的平生與貢獻
- 2025年版護理法律法規(guī)
- 房屋市政工程生產(chǎn)安全重大事故隱患排查表(2024版)
- 統(tǒng)編版(2024新版)七年級下冊道德與法治期末復習背誦知識點提綱
- 口服降糖藥物分類詳解
- 健康體檢報告解讀頁課件
評論
0/150
提交評論