




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、在Oracle 數據庫上使用VisualStudio 2005或 2001構建.NET應用程序了解構建使用Oracle數據庫的.NET應用程序所涉及到的基本但不可或缺的 過程。作者:John Paul Cook2008年9月發布。請閱讀本指南的 Visual Studio .NET 2003 版本。隨著Microsoft 的.NET Framework的日益流行,許多開發人員迫切想了解關 于將.NET應用程序與Oracle集成的最佳方法的信息 一不僅在基本連通性 方面,還包括與使用 Visual Studio 2005或2008進行有效應用程序開發的關 系。在本文中,我將說明構建使用Oracl
2、e數據庫的.NET應用程序所涉及到的基本 但不可或缺的過程,包括:如何添加工程引用,以在您的.NET工程中支持Oracle類如何創建Oracle數據庫連接字符串如何使用 Connection、Comman(和 DataReader 對象您將有機會應用您在三個 上機操作實踐中學到的內容,難度從相對簡單到比較復 雜不等。本文中的屏幕快照出自 Visual Studio 2008,但體驗與Visual Studio 2005中非常類似。要獲得關于如何保護應用程序的信息和實驗,請參見我的文章“在Oracle數據 庫上保護.NET應用程序”。(另請參見OTN的.NET開發人員中心,以獲取 涉及許多Ora
3、cle.NET應用程序生命周期問題的技術文章)。請注意,免費的 Oracle Developer Tools for Visual Studio (可從 OTN 下載) 提供了一個Visual Studio 插件,該插件可以簡化 Oracle上的.NET應用程 序開發,并使之更加直觀。但該主題超出了本文的討論范疇。.NET數據提供程序除了基本的Oracle客戶端連通性軟件,.NET應用程序還需要使用稱為 受管理 的數據提供程序(其中“受管理的”指的是代碼由.NET框架管理)的工具。數據提供程序是指.NET應用程序代碼和Oracle客戶端連通性軟件之間這一層。 在幾乎所有情況下,最優的性能都是通
4、過使用為特定數據庫平臺優化了的提供程 序而不是一般的.NET OLE DB數據提供程序實現的。Oracle、Microsoft和第三方供應商都提供了針對 Oracle產品進行了優化 的.NET數據提供程序。Oracle和Microsoft免費提供其Oracle數據提供程序。(Microsoft 為.NET Framework 2.0提供的提供程序包含在該框架中,但 仍需安裝Oracle 客戶端軟件)。在本文中,我們將使用Oracle Data Provider for .NET (ODP.NET),該提供程序包含在 Oracle數據庫中或單獨提供 下載。ODP.NET提供標準的ADO.NET數
5、據訪問,同時提供特定于 Oracle數據庫的特 性,如XML DB數據訪問性能優化以及真正應用集群連接池。安裝ODP.NET和Oracle客戶端軟件后,即可開始使用Visual Studio進行應 用程序開發。在開始開發前,請先確認客戶端連通性。如果您在VS.NET所在的 計算機上能夠使用 Oracle客戶端軟件(如SQL*Plus)連接到Oracle,則證明 您已經正確地安裝和配置了 Oracle客戶端軟件。如果您是初次接觸Oracle,請參見Oracle數據庫兩日速成開發人員指南 中的 “安裝.NET產品”一節,其中專門介紹了有關安裝和配置ODP.NET的背景信息;或參見Oracle數據庫
6、文檔庫,以了解有關Oracle數據庫的一般信息。在 Visual Studio 2005或2008中創建工程現在我們來創建一個用于從 Oracle數據庫中檢索數據的ODP.NET應用程序 然后,我們將了解如何使用 ODP.NET執行錯誤處理,以及如何處理其他數據檢 索情況。在啟動Visual Studio 之后,第一個任務是創建一個工程。可以按如下所示選 擇File | New | Project ,也可以單擊 File 正下方的 New Project 按鈕。圖 1 在 Visual Studio 2008 Service Pack 1中創建新工程出現一個NewProject對話框。在對話框
7、左側的Project Types下,選擇您的編程語言。在這個例子中,我們選擇“ Visual Basic ”。在 Visual Studio in stalledtemplates下方的右側,選擇一個工程模板。為簡單起見,我們選擇“ Win dows Forms Applicati on ”。圖2 使用 New Project 對話框您希望指定有意義的工程名稱(我們使用OraWinApp)和解決方案名稱(我們使 用OraWinApp)。一個解決方案包含一個或多個工程。當一個解決方案僅包含一 個工程時,許多人對二者使用相同的名稱。添加引用由于我們的工程必須與Oracle數據庫連接,因此必須添加一
8、個到包含所選數據 提供程序的ODP.NET DLL的引用。在Solution Explorer內,選擇工程名稱,右鍵單擊并選擇 AddReferenee。或者,您可以轉至菜單欄并選擇Project,然后選擇 Add Referenee 。叫 OraWinApp - Microsoft Visuat Studio甘丨回! T S T3l圖3添加引用出現 Add Referenee 對話框。曰 J | AV Solution0評JinApp,(1 project)RefreshBuildRebuildCleanPublish.Run Code AnalysisCdculte Code Metric
9、sOrit)=, i_A-BAddAdd Reference.dd Service Referen匚已”,.View Class DiagramSet as Startup ProjectDebug匚utPasteRernoveAdd ReferenceNET | 羽rqiect| Browse | Recent4Component NameVersionRuntimePath*msdatasrc7,03300.0vl ,0.3705匚 ProgramOffice11,0.0,0vl 1.4322CAProgramOffice12.0,0,0vl ,14322C :P rogrami Orac
10、le,DataAccess2111A2Q2050727C:appODTOracle,Web2.111j620v2,0.50727匚:appODTPresentationBuildT asks3,0.0,0v2,0.50727C :P rogramPresentation 匚 ore3.0.0,0vZ ,0.50727匚:Prcgram |PresentationFramework3.0.0,0v2,0.50727CAP rogramPresentation Framework Am10,0,0v2,0.50727C:ProgramPresentation Fra rncworkL.3.0.0,
11、Qv2,0.50727C :P rogramPresentationFrameworklu-H3.0.0,0v2,0.50727C;Program * Debug T旬電鮎林岸事|岸豐|口門羣# V用昂Q ?Forml,vb Fcrml,vb Design* Start Pageitenr 勺 SaEdt_nlCol 27Ch 27Solution n x3 H ;Solution OraVV 飼 OraWinAppd My ProjForml.vLnt ,puSolu.匚乜:Properties t XINS圖5 在Visual Basic 中添加Imports 語句連接字符串和對象Orac
12、le連接字符串和Oracle 名稱解析是不可分的。假定您在 tnsnames.ora 文件中定義了一個數據庫別名 OraDb,如下:OraDb=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)OraDb別名定義了客戶端的數據庫地址連接信息。要使用上面所述的在tnsnames.ora文件中定義的OraDb別名,您需要使用以下語法:Dim oradb As String = Data Source
13、=OraDb;User Id=scott;Password=tiger; Visual Basic string oradb = Data Source=OraDb;User Id=scott;Password=tiger; / C# 不過,您可以修改連接字符串, 這樣就不需使用 tnsnames.ora 文件。只需使用 在 tnsnames.ora 文件中定義別名的語句替換別名即可。 Visual BasicDim oradb As String = Data Source=(DESCRIPTION= _+(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=
14、ORASRVR)(PORT=1521) _ + (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL);+ User Id=scott;Password=tiger;/ C#string oradb = Data Source=(DESCRIPTION=+ (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521)+ (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL);+ User Id=scott;Password=tiger;
15、正如您在上面看到的那樣, 用戶名和口令是以不加密的文本形式嵌入到連接字符 串中的。 這是創建連接字符串的最簡單的方法。 然而, 從安全的角度而言不加密 文本的方法是不可取的。 而且,您需要了解編譯的 .NET 應用程序代碼僅比不加 密文本形式的源代碼文件稍微安全一點。可以非常簡便地反編譯 .NET DLL 和 EXE 文件,進而查看原始的不加密文本形式的內容。 (加密實際上是正確的解決 方案,但這個主題與我們這里的討論相差太遠。)接下來,您必須從連接類中完成一個連接對象的實例化。 連接字符串必須與連接 對象關聯。Dim conn As New OracleConnection(oradb) V
16、isual BasicOracleConnection conn = new OracleConnection(oradb); / C# 注意,通過將連接字符串傳遞給連接對象的構造函數 (該構造函數進行了重載) 連接字符串與連接對象建立了關聯。 構造函數的其他重載允許使用以下這些替代 的語法:Dim conn As New OracleConnection() Visual Basic conn.ConnectionString = oradbOracleConnection conn = new OracleConnection(); / C# conn.ConnectionString =
17、 oradb; 在連接字符串與連接對象建立關聯之后,使用 Open 方法來創建實際的連接。 conn.Open() Visual Basicconn.Open(); / C# 我們將在稍后介紹錯誤處理Comma nc對象Comma nd寸象用于指定執行的SQL命令文本 一SQL字符串或存儲過程。與Connection 對象類似,它必須從其類中完成實例化,并擁有一個重載的構造函數。在本示例中,ODP.NE0將在departments 表(DEPT)中執行SQL查詢,并 返回部門編號 (DEPTNO) 為 10 的部門名稱 (DNAME)。Dim sql As String = select dn
18、ame from dept where deptno = 10 VisualBasicDim cmd As New OracleCommand(sql, conn) cmd.CommandType = CommandType.Textstring sql = select dname from dept where deptno = 10; / C#OracleCommand cmd = new OracleCommand(sql, conn); cmd.CommandType = CommandType.Text;使用不同的重載時,語法的結構稍有不同。Comma nd寸象有用于執行命令文本的
19、 方法,我們將在下一部分中講述。不同的方法適用于不同類型的 SQL 命令。檢索標量值可以通過實例化 OracleDataReader 寸象并使用 ExecuteReader 方法從數據庫 中檢索數據, 這將返回一個 OracleDataReader 寸象。通過將列名或以零為基數 的列序號傳遞給 OracleDataReader 可以訪問返回的數據。Dim dr As OracleDataReader = cmd.ExecuteReader() Visual Basic dr.Read()Label1.Text = dr.Item(dname) retrieve by column nameLa
20、bel1.Text = dr.Item(0) retrieve the first column in the select listLabel1.Text = dr.GetString(0) return a .NET data typeLabel1.Text = dr.GetOracleString(0) return an Oracle data type 有適當類型的存取程序用于返回 .NET 本地數據類型,其他存取程序用于返回本 地 Oracle 數據類型,所有這些存取程序都受C#、Visual Basic或任何其他 .NET 語言的支持。以零為基數的序號被傳遞給存取程序, 以指定要
21、返回的列。 OracleDataReader dr = cmd.ExecuteReader(); / C#dr.Read();label1.Text = drdname.ToString(); / C# retrieve by column name label1.Text = dr.GetString(0).ToString(); / return a .NET data type label1.Text = dr.GetOracleString(0).ToString(); / return an Oracledata type在這個簡化的例子中,DNAME勺返回值是一個字符串,它用來設置
22、標簽控件的文 本屬性值(也是一個字符串)。但如果檢索的是 DEPTNO而不是字符串,將出 現數據類型不匹配的情況。當源數據類型與目標數據類型不匹配時, .NET 運行 時將嘗試隱式地轉換數據類型。 有時數據類型不兼容, 則隱式轉換將失敗, 并跳 出一個異常警報。 但即使可以進行隱式轉換, 使用顯式數據類型轉換仍比用隱式 數據類型轉換好。到整型的顯式轉換顯示如下:Label1.Text = CStr(dr.Item(deptno) Visual Basic integer to string castC# is not as forgiving as Visual Basic on implic
23、it conversions. Youll find yourself doing explicit conversions: label1.Text = dr.GetInt16(deptno).ToString(); / C# 您可以顯式地轉換標量值以及數組。關閉并清除可以調用連接對象的 Close 或 Dispose 方法來關閉到數據庫的連接。 Dispose 方法調用 Close 方法。conn.Close() Visual Basic conn.Dispose() Visual Basic conn.Close(); / C# conn.Dispose(); / C# 如果您使用 VB
24、 的 Using 關鍵字或 C# 的 using 關鍵字,則不必顯式調用 Close 或 Dispose 。using (OracleConnection conn = new OracleConnection(oradb) / C# conn.Open();OracleCommand cmd = new OracleCommand(); cmd.Connection = conn;cmd.CommandText = select dname from dept where deptno = 10; cmd.CommandType = CommandType.Text;OracleDataRe
25、ader dr = cmd.ExecuteReader(); dr.Read();labell.Text = dr.GetStri ng(O);此外,OracleCommand包含一個 Dispose 方法;OracleDataReader 包含一個 Close方法和一個Dispose方法。關閉并清除.NET對象將釋放系統資源,從 而確保更高效的應用程序性能,這一點在高負載情況下尤為重要。您可以試驗在 上機操作1 (從數據庫中檢索數據)和上機操作2 (增加交互性)中學到的一些錯誤處理當錯誤發生時,.NET應用程序應該能夠適當地處理錯誤,并通過提供有意義的 消息來通知用戶。Try-Catch-F
26、inally結構的錯誤處理是.NET語言的一部分;下面是使用Try-Catch-Finally語法的一個相對最小的示例:Visual BasicTryconn. Ope n()Dim cmd As New OracleComma ndcmd.C onnection = conncmd.Comma ndText = select dn ame from dept where dept no = ” +TextBox1.Textcmd.Comma ndType = Comma ndType.TextIf dr.R ead() The nLabel1.Text = dr.Item(dname) or
27、 use dr.Item(0) End IfCatch ex As Excepti on catches any errorMessageBox.Show(ex.Message.ToStri ng()Fi nallyIn a real applicati on, put clea nup code here.End Try / C#tryconn .Ope n();OracleComma nd cmd = new OracleComma nd();cmd.C onnection = conn;cmd.Comma ndText = select dn ame from dept where de
28、pt no = ” + textBox1.Text;cmd.Comma ndType = Comma ndType.Text;if (dr.Read()/ C#labell.Text = drd name.ToStri ng();/ or use dr.GetOracleStri ng(0).ToStri ng()catch (Excepti on ex) / catches any errorMessageBox.Show(ex.Message.ToStri ng();fin ally/In a real applicati on, put clea nup code here.雖然這種方法
29、將適當地捕獲嘗試從數據庫中獲取數據時發生的任何錯誤,但這種方法對用戶卻不友好。例如,看看下面這條在數據庫不可用時顯示的消息:Database error: ORA-12545 Connect failed because target host or object does not existOK圖6捕獲ORA-12545錯誤并顯示給用戶Oracle DBA或開發人員很清楚ORA-12545的意義,但最終用戶不清楚。一種更 好的解決方案是添加一條額外的 Catch語句來捕獲最常見的數據庫錯誤并顯示 對用戶友好的消息。Catch ex As OracleExcepti on catches on
30、ly Oracle errorsSelect Case ex.NumberCase 1MessageBox.Show(Error attempt ing to in sert duplicatedata.)Case 12545MessageBox.Show(The database is un available.)Case ElseMessageBox.Show(Database error: + ex.Message.ToStri ng() End SelectCatch ex As Excepti on catches any errorMessageBox.Show(ex.Messag
31、e.ToStri ng()catch (OracleExcepti on ex) / catches only Oracle errorsswitch (ex.Number)case 1:MessageBox.Show(Error attempt ing to in sert duplicatedata.);break;case 12545:MessageBox.Show(The database is un available.);break;default:MessageBox.Show(Database error: +ex.Message.ToStri ng();break;catch
32、 (Excepti on ex) / catches any error not previously caughtMessageBox.Show(ex.Message.ToStri ng();注意上述代碼示例中的兩條 Catch語句。如果沒有捕獲到任何 Oracle錯誤, 那么將跳過第一條語句分支,讓第二條語句來捕獲任何其他非 Oracle錯誤。在 代碼中,應該根據從特殊到一般的順序對Catch語句排序。在執行完用戶友好的異常處理代碼之后,ORA-12545錯誤消息顯示如下:The database is una; arlabk.OK圖7 ORA-12545錯誤的用戶友好的錯誤消息無論是否發
33、生錯誤,Fin ally 代碼塊總會執行。清除代碼即包含在此代碼塊中。 如果未使用Usi ng或using,應清除Fin ally 代碼塊中的連接和其他對象。利用DataReader檢索多個值到目前為止,我們的示例僅說明了如何檢索單個值。OracleDataReader可以檢索多列和多行的值。首先執行多列、單行查詢:select dept no, dn ame, loc from dept where dept no = 10要獲取列的值,可以使用以零為基數的序號或列名。序號與查詢中的順序相關。因此,可以在Visual Basic中通過使用dr.ltem(2) 或dr.ltem(loc) 來檢
34、 索LOC列的值。下面是將來自上一查詢的 DNAME和LOC列串連起來的代碼段:Label1.Text = The + dr.Item(dname) + department is in + dr.Item(loc) VBlabel1.Text = The + drdname.ToString() + department is in + drloc.ToStri ng(); / C#現在我們進行返回多行的查詢:select dept no, dn ame, loc from dept要處理從OracleDataReader中返回的多個行,需要某種類型的循環結構。此外, 需要一個可以顯示多行的
35、控件。OracleDataReader是一個僅正向的只讀游標,因此不能將其與可更新或完全可滾動的控件(如Windows Forms DataGrid控件) 捆綁在一起。OracleDataReader與ListBox 控件兼容,如以下代碼段所示: While dr.Read() Visual BasicListBox1.ltems.Add(The + dr.Item(dname) + department is in + dr.Item(loc)End Whilewhile (dr.Read()/ C#listBox1.ltems.Add(The + drdname.ToString()+ d
36、epartment isin +drloc.ToStri ng();上機操作3 (利用OracleDataReader檢索多列和多行)重點介紹了這些概念中 的一部分。在x64上構建和運行在 x64 操作系統上運行 Visual Studio 2008 時,Active solution platform 默 認為Any CPU在構建工程之前請將其更改為 x86。Configuration ManagerActive solution corfigurationjActive solution platform:Debug* xBBProject contexts (check the proj
37、ect configurations to build or deploy):ProjectConfigurationPlatformBuildOraWinAppDebugClose圖8在64 位平臺上構建時將 Any CPU更改為x86結論本文向您介紹了使用.NET編程語言訪問Oracle數據庫的過程。您現在應該能 夠連接數據庫并檢索多列和多行。上機操作1 :從數據庫中檢索數據在開始之前,您必須已經創建一個工程并添加了引用,如本文前面所述。1.接著向Windows表單中添加一個按鈕控件和一個標簽控件。務必在這些 控件的上方留出空間,以便在上機操作 2中添加其他控件。響 OraWHApp ”
38、Microsoft Visual Studio=回 |w34回Text瞻 OraWinApp - Microsoft Vjsual Studio圖9包含按鈕和標簽控件的上機操作1表單2.添加代碼,它們用于從Oracle數據庫中檢索數據并在表單上顯示結果。 將代碼放在按鈕的單擊事件處理程序中。開始這項任務的最容易的方式是 雙擊該按鈕,因為它將為事件處理程序創建一個stub。k PointerI:i 3001300* 丄1 *.二 T /i ft i L-,飛諂丄Tooiboxx+ AIF Windows Forni5:Common ControlsJ. 舊 庁叩lore rtlcolboxBui
39、ld ebug Dat5 Fgrmst Tools Tt Apia lyze Window HelpButte nChee kB oxCheckedListBoxComboBoxDateTimePickerA LinkLabelListBox:嚴 ListView H MaskKfTextBoxMontliCalendar宜 Notifylcon!: MumcricUpDownSolution m. 4為層園口 Solution Ors 涸 Ora Win/5 可My Pi Form:5oluICIjkProperties 口 :RightT False Text FormlThe text
40、atsociate with the control.Forml.vb (Design* start PageForml System J?*Button 1Label 1“ Forml響 OraWHApp ” Microsoft Visual Studio=回 |w3響 OraWHApp ” Microsoft Visual Studio=回 |w3COM ClassExpose Class toCOM沖Tsb復sDfveFile Edit Yiew Project Build Qdsug Dta Tools Test Analyze Window Help勾兇凸 HO 希.*9 T Deb
41、ug g j? 口電釘肚字字二2 丿* - 電少r】苓麗FQElljb吃Han血血or*】”耳ReadyLn 5Coll?Ch 12決 Solution Ors:-i 國 OraWin/的My Pi )Form:寸一Properties 4Forml AttributesCOM 修改定義選擇字符串的代碼:cmd.Comma ndText = select dn ame from dept where dept no = ” + TextBox1.Text VB旳 OraWinApp - Mrcrosoft Visual Studio*-uJ(isD曲I運行應用程序。為DEPTNO俞入10測試應
42、用程序。輸入一個無效的 DEPTNQ如50 )重新測試應用程序。應用程序將退出。LinkLbel ListBox List View MaskedTextBox Month Calendar Notifykon NumericUpDon PictureBox ProgressBar RfidioButton RichT extBox TextBoxToolTip TreeView 詡 WebBrowser ContarnersFile Edit View Project Build 氐 bugDat5 Fgrrnst Tools Tt Apialyze勾應p ij? H詡”13 i I:豐豈J
43、耶啞一型I iTooox.9.20.圖13未處理的異常修改代碼以防止在輸入無效的 DEPTNO時出現錯誤。讓我們回顧一下,ExecuteReader方法實際返回一個對象。將包含 dr.Read 的行替換為以 下所有語句。If dr.Read() Then Visual BasicLabel1.Text = dr.ltem(d name).ToStri ng()ElseLabel1.Text = dept no not foundEnd Ifif (dr.Read()/ C#label1.Text = drd name.ToS
44、tri ng();elselabel1.Text = dept no not foun d;Toe box宰 X+ All Windows FornixJL- Common Controh=* Pointer畫 Button 回 CheekBox * CheckedListBox譎 Combo BoxDeteTimePickerLab&l_護川遢匸皿LinkLabelLiirtBcxListviewrdaskedTextlBoxW -& tloalbow丿血1o 7事 | Debug二:ES 4 i 心 Ji專盟丨忌髯聖帶二 Ff 匕 U 1 U. 1mm 7 Ji;t_|Build fiebug Data Tooh Test Analyze WindowHelpStart Page Forml.vb Forml.vb Designp丄-.二 Solution Or,;二1 國 OraWin“ Lib My P ForrnProperties 丁 口 :nr輸入不存在的DEPTNO數字測試應用程序。現在應用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國DLP光顯屏行業市場調查研究及發展趨勢預測報告
- 采掘知識培訓課件
- 2025年中國柑桔行業市場全景評估及發展戰略規劃報告
- 2024-2030年中國云VR行業發展運行現狀及投資潛力預測報告
- 2025年中國制糖行業發展運行現狀及投資潛力預測報告
- 2025年中國藍寶石長晶爐行業發展趨勢預測及投資戰略咨詢報告
- 2025年 云南省化工儀表操作證理論考試練習題附答案
- 2025年 特種設備作業人員-叉車證理論考試練習題附答案
- 中國現調機行業市場全景分析及投資前景展望報告
- 2025年中國重點城市公共汽車客運行業市場運行態勢及投資戰略規劃報告
- 安徽省技能人才評價考評員考試題庫
- DB32∕T 4170-2021 城市軌道交通車輛基地上蓋綜合利用防火設計標準
- 網絡域名及域名解析PPT課件
- 《湖北省中小學生命安全教育課程標準》
- (完整)初中物理電學中常見的列方程計算歸類
- 浙江省2016年10月物理學業水平考試試題
- 蘇州大學物理化學真題
- 裝飾裝修自評報告
- 豎格-硬筆書法紙模板(可打印)
- 內科常見病、多發病的急診處理、診療規范及轉診要求
- 高級會計師考試試題及答案解析
評論
0/150
提交評論