




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章C#的數(shù)據(jù)庫(kù)操作
ADO.NET向編程人員提供了功能強(qiáng)大的數(shù)據(jù)訪問(wèn)能力,既可以直接在編程模式下通過(guò)輸入程序代碼設(shè)計(jì)數(shù)據(jù)訪問(wèn)程序,也可以利用系統(tǒng)提供的數(shù)據(jù)訪問(wèn)向?qū)е苯舆M(jìn)行可視化程序設(shè)計(jì)。9.1Access數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)(Database,即DB)是存儲(chǔ)在一起的相關(guān)數(shù)據(jù)的集合,是存儲(chǔ)數(shù)據(jù)的“倉(cāng)庫(kù)”。是指依照一定格式存放在一起的數(shù)據(jù)記錄文件。。數(shù)據(jù)庫(kù)中的信息是以表的形式組成的,一個(gè)數(shù)據(jù)庫(kù)中可以放多個(gè)表,各個(gè)表具有行和列。“數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS”(databasemanagementsystem)則是用來(lái)操作與管理數(shù)據(jù)庫(kù)的軟件,MicrosoftAccess、MicrosoftSQLServer、Oracle都是屬于DBMS軟件,通過(guò)這些軟件,用戶可以對(duì)數(shù)據(jù)進(jìn)行定義、創(chuàng)建與運(yùn)算。
信息中心專門人才基本情況表
編號(hào)姓名性別出生日期工資黨員否簡(jiǎn)歷照片bj10001劉偉箭男1960.08.232000.00T(略)(略)bj11002劉簡(jiǎn)捷男1958.12.311800.00T(略)(略)gz05001藤波海男1956.04.141160.00T(略)(略)gz05002楊行東男1949.03.301260.00F(略)(略)jl04001林慧繁女1965.02.036000.00T(略)(略)jl04002黃曉遠(yuǎn)男1969.08.128000.00F(略)(略)sy02030李鵬程男1946.02.083000.00F(略)(略)sy02035王國(guó)民男1935.05.205000.00F(略)(略)sh01001金銀橋女1969.01.242000.00F(略)(略)sh01002林立蕎女1964.08.164500.00F(略)(略)9.1.1建立Access數(shù)據(jù)庫(kù)表
選按“開(kāi)始”|“程序”|“MicrosoftAccess”,啟動(dòng)Access,屏幕上會(huì)出現(xiàn)對(duì)話框,在任務(wù)窗格內(nèi)點(diǎn)取“空Access數(shù)據(jù)庫(kù)”,然后單擊“確定”按鈕。出現(xiàn)“文件新建數(shù)據(jù)庫(kù)”對(duì)話框,指定新數(shù)據(jù)庫(kù)的保存位置、文件名,然后按“創(chuàng)建”。MicrosoftAccess創(chuàng)建的數(shù)據(jù)庫(kù)文件的擴(kuò)展名是.mdb。9.1.2Access數(shù)據(jù)庫(kù)操作1.創(chuàng)建新數(shù)據(jù)庫(kù)項(xiàng)目2.創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)數(shù)據(jù)庫(kù)的操作首先要和數(shù)據(jù)庫(kù)建立一個(gè)連接,與數(shù)據(jù)庫(kù)建立連接可以通過(guò)系統(tǒng)提供的控件實(shí)現(xiàn)。3.創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象和訪問(wèn)方法4.設(shè)置程序顯示界面5.顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù)20世紀(jì)90年代以來(lái),C/S模式得到了十分迅速的流行。它主要從一次數(shù)據(jù)計(jì)算的完成過(guò)程這個(gè)角度而言的,客戶機(jī)進(jìn)行數(shù)據(jù)請(qǐng)求,請(qǐng)求傳到服務(wù)器,服務(wù)器負(fù)責(zé)完成數(shù)據(jù)計(jì)算或數(shù)據(jù)庫(kù)操作,最終結(jié)果返回到客戶機(jī)。幾乎每個(gè)新的網(wǎng)絡(luò)操作系統(tǒng)和每個(gè)新的多用戶數(shù)據(jù)庫(kù)系統(tǒng)都聲稱能支持C/S模式。實(shí)現(xiàn)C/S模式允許有許多不同的策略。從最典型的數(shù)據(jù)庫(kù)管理系統(tǒng)的應(yīng)用來(lái)看,在LAN上采取的C/S模式,即指在LAN中至少有一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器(DBMSserver),可以作為希望去存取公共數(shù)據(jù)庫(kù)的各臺(tái)工作站的后援支持。把應(yīng)用任務(wù)中的程序執(zhí)行內(nèi)容劃分成兩部分:與數(shù)據(jù)庫(kù)存取有關(guān)的部分由DBMSserver承擔(dān),與應(yīng)用的人機(jī)界面處理,輸入/輸出或一部分應(yīng)用的邏輯功能等有關(guān)的內(nèi)容由client端工作站承擔(dān)。SQL語(yǔ)言簡(jiǎn)介SQL(StructuredQueryLanuage,結(jié)構(gòu)化查詢語(yǔ)言)是現(xiàn)代關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言?,F(xiàn)在的大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)都采用SQL語(yǔ)言作為共同的數(shù)據(jù)存取語(yǔ)言和標(biāo)準(zhǔn)接口,使不同數(shù)據(jù)庫(kù)系統(tǒng)之間的互操作成為了可能。
SQL語(yǔ)言的功能極為強(qiáng)大,語(yǔ)言十分簡(jiǎn)捷,第321頁(yè)的表13-1列出了SQL語(yǔ)言的9個(gè)命令,這9個(gè)命令就可以完成幾乎所有的數(shù)據(jù)操作,在這9個(gè)命令中,常用的只有4個(gè)。
如果要使用SQL編寫程序,則需要另一語(yǔ)言或平臺(tái)來(lái)實(shí)現(xiàn)所有實(shí)際信息的顯示。例如:SELECT*FROMSTU1語(yǔ)句:SELECT學(xué)號(hào),數(shù)學(xué)+5FROMSTU1WHERE關(guān)鍵字在WHERE子句中,用條件表達(dá)式來(lái)確定要顯示的記錄。 ??? WHERE<條件表達(dá)式>例如:SELECT學(xué)號(hào),姓名FROMSTU1WHERE數(shù)學(xué)=90SELECT學(xué)號(hào),姓名FROMSTU1WHERE數(shù)學(xué)=90OR平均分>=85LIKE關(guān)鍵字格式:……WHERE<屬性名>LIKE<字符串常量>說(shuō)明:字符串常量中的字符可以包含如下兩個(gè)特殊符號(hào):%表示任意長(zhǎng)度的字符串;_表示任意一個(gè)字符例: 查詢所有姓“張”的學(xué)生的學(xué)號(hào)和姓名。SELECT學(xué)號(hào),姓名FROM學(xué)生表WHERE姓名LIKE‘張%’例:查詢第二個(gè)漢字是“紅”的學(xué)生的學(xué)號(hào)和姓名SELECT學(xué)號(hào),姓名FROM學(xué)生表WHERE姓名LIKE‘_紅%’IN關(guān)鍵字在WHERE子句中使用IN可以指定值是否在表中。例如:顯示學(xué)號(hào)為962102和962104的記錄。SELECT*FROMSTU2WHERE學(xué)號(hào)in(“962102”,“962104”)
ORDERBY關(guān)鍵字ORDERBY<排序?qū)傩悦?gt;[ASC|DESC]子句用來(lái)對(duì)數(shù)據(jù)結(jié)果排序,ASC按升序排列,DESC按降序排列,默認(rèn)是ASC。如:SELCET*FROMSTU1WHERE數(shù)學(xué)IN(78,92,91)其結(jié)果按原記錄順序顯示,要安數(shù)學(xué)成績(jī)排序,需加上ORDERBY<排序字段名>子句。如下例:2.INSERT命令(插入命令)格式:INSERTINTO<表文件名>(屬性列表)VALUE(數(shù)據(jù)表)功能:插入一條新記錄,其內(nèi)容是將VALUE后(數(shù)據(jù)表)中的數(shù)據(jù)依次送到(屬性列表)中的各屬性。如:INSERTINTOSTU1(學(xué)號(hào),姓名,計(jì)算機(jī)基礎(chǔ),數(shù)學(xué),馬列原理,體育,總分,平均分)VALLUE(‘962105’,‘李小麗’,77,88,90,80.2)3.UPDATE命令(更新命令)格式:UPDATE<表文件名>SET<屬性列名>=<表達(dá)式>WHERE<條件表達(dá)式>例如:UPDATESTU2SET就讀方式=‘統(tǒng)招’ UPDATESTU1SET計(jì)算機(jī)基礎(chǔ)=計(jì)算機(jī)基礎(chǔ)*1.15%9.3ADO.NET編程無(wú)論什么樣的程序,都要與數(shù)據(jù)打交道,現(xiàn)在的程序中要處理的信息量越來(lái)越大,早已不能滿足幾個(gè)變量所提供的信息量,而是把大量信息預(yù)先存儲(chǔ)到數(shù)據(jù)庫(kù)文件中,然后利用某種技術(shù)讀取數(shù)據(jù)庫(kù)中的預(yù)存信息,將讀取的信息送給程序界面顯示出來(lái),或?qū)⑿聝?nèi)容存入數(shù)據(jù)庫(kù)。ADO.NET就是就是負(fù)責(zé)數(shù)據(jù)存取的對(duì)象。
9.3.1ADO.NET的概念
在應(yīng)用程序中訪問(wèn)數(shù)據(jù)庫(kù)的一般過(guò)程為:首先必須連接數(shù)據(jù)庫(kù);接著發(fā)出SQL語(yǔ)句,告訴數(shù)據(jù)庫(kù)要進(jìn)行什么樣的工作;最后由數(shù)據(jù)庫(kù)返回所需的數(shù)據(jù)記錄。在ADO.NET中,上述訪問(wèn)數(shù)據(jù)庫(kù)的三項(xiàng)工作,分別由三個(gè)對(duì)象來(lái)完成:Connection對(duì)象負(fù)責(zé)連接數(shù)據(jù)庫(kù);Command對(duì)象對(duì)數(shù)據(jù)下達(dá)SQL命令;DataSet對(duì)象用來(lái)保存所查詢到的數(shù)據(jù)記錄。在ADO.NET中,介于DataSet和Connection對(duì)象之間,還有一個(gè)在數(shù)據(jù)庫(kù)與DataSet對(duì)象之間扮演傳遞數(shù)據(jù)的對(duì)象DataAdapter(適配器)。此外,還有一個(gè)DataView對(duì)象,該對(duì)象提供了對(duì)DataSet對(duì)象內(nèi)的表進(jìn)行排序、過(guò)濾記錄及記錄搜索等功能。例://創(chuàng)建一個(gè)和數(shù)據(jù)庫(kù)的連接……//SQL命令字符串stringstrCom=“SELECT*FROM世界杯”;//創(chuàng)建一個(gè)數(shù)據(jù)集DataSetmyDataSet=newDataSet();//用OleDbDataAdapter得到一個(gè)數(shù)據(jù)集
OleDbDataAdapterda=newOleDbDataAdapter(strCom,myConn);//把DataSet綁定世界杯數(shù)據(jù)表da.Fill(myDataSet,“世界杯”);……da.Update(myDataSet,“世界杯”);
OleDbConnection控件的主要功能是負(fù)責(zé)數(shù)據(jù)源的連接。在連接到數(shù)據(jù)源時(shí)必須提供連接到數(shù)據(jù)源的一些屬性,如:Provider、DataSource等。例:OleDbConnectionmyconn=newOleDbconection(“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\test.mdb”);例:OleDbConnectionmyconn=newOleDbconection(“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\test.mdb”);字符串太長(zhǎng),可以改寫成如下兩條命令:
stringstrCon=“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\test.mdb”);OleDbConnectionmyconn=newOleDbconection(strCon);OleDbconection的兩個(gè)重要方法:Open()方法:打開(kāi)與數(shù)據(jù)庫(kù)表的連接例:myconn.Open();Close()方法:關(guān)閉與數(shù)據(jù)庫(kù)表的連接例:myconn.Close()例:privatevoidbutton1_Click(objectsender,System.EventArgse){try{stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=F:\\book.mdb";OleDbConnectionmyConn=newOleDbConnection(strCon);myConn.Open();MessageBox.Show("數(shù)據(jù)庫(kù)連接成功!");myConn.Close();}catch{MessageBox.Show("連接錯(cuò)誤","錯(cuò)誤");}}例:publicvoidGetConnected(){try{ stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=F:\\Book.mdb";OleDbConnectionmyConn=newOleDbConnection(strCon);stringstrCom="SELECT*FROMbook";this.myDataSet=newDataSet();myConn.Open();MessageBox.Show("連接成功!");OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);myCommand.Fill(myDataSet,"book");myConn.Close();}catch(Exceptione){MessageBox.Show("連接錯(cuò)誤!"+e.ToString(),"錯(cuò)誤");}}privatevoidbutton1_Click(objectsender,System.EventArgse){GetConnected();dataGrid1.DataSource=myDataSet.Tables["book"];}
9.3.3ADO.NET編程及綁定1.數(shù)據(jù)集編程在ADO.NET中,建立連接后就需要使用數(shù)據(jù)命令打包SQL語(yǔ)句或存儲(chǔ)過(guò)程。如果是使用SELECT語(yǔ)句查詢數(shù)據(jù)庫(kù),調(diào)用命令的執(zhí)行方法后將返回查詢結(jié)果,同時(shí)將數(shù)據(jù)緩存到數(shù)據(jù)集中,用戶可使用數(shù)據(jù)集獲取這些行;如果是調(diào)用Update命令,則將返回所影響的行數(shù);其他類型的命令將返回一個(gè)錯(cuò)誤代碼。在ADO.NET中,數(shù)據(jù)集就是臨時(shí)存儲(chǔ)從數(shù)據(jù)庫(kù)檢索的記錄,是從數(shù)據(jù)源檢索的記錄的緩存,數(shù)據(jù)集中可包含一個(gè)或多個(gè)表,這些表基于實(shí)際數(shù)據(jù)庫(kù)中的表。因?yàn)閿?shù)據(jù)集實(shí)際上是數(shù)據(jù)庫(kù)的私有副本,所以它不一定反映數(shù)據(jù)庫(kù)的當(dāng)前狀態(tài)。如果想要查看其他用戶進(jìn)行的最新更改,可以通過(guò)調(diào)用適當(dāng)?shù)腇ill()方法刷新數(shù)據(jù)集。SQL命令主要有SELECT、INSERT、UPDATE、DELETE。
2.數(shù)據(jù)綁定Windows窗體的數(shù)據(jù)綁定便于在窗體控件中顯示數(shù)據(jù),如果使用DataGrid控件,則需要使用DataGrid控件進(jìn)行綁定。主要通過(guò)Fill()方法。
例:其中窗體的“Load”事件代碼為:privatevoidForm1_Load(objectsender,System.EventArgse){try{
stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\book.mdb";OleDbConnectionmyConn=newOleDbConnection(strCon);stringstrCom="SELECT*FROMbookorderby編號(hào)";myConn.Open();OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);myDataSet=newDataSet();myCommand.Fill(myDataSet,"book");this.dataGrid1.DataSource=this.myDataSet.Tables["book"];myConn.Close();}catch(Execptionx){MessageBox.Show(“錯(cuò)誤!”+x.ToString(),“error”);}}其中“查詢”按鈕的“單擊”事件代碼為:privatevoidbutton1_Click(objectsender,System.EventArgse){try{stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\book.mdb";OleDbConnectionmyConn=newOleDbConnection(strCon);
myConn.Open();
stringstrCom=“SELECT*FROMbookWHERE書(shū)名Like'%"+this.textBox1.Text+"%'";OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);this.myDataSet.Clear();myCommand.Fill(myDataSet,"book");myConn.Close();}catch(Execptionx){MessageBox.Show(“錯(cuò)誤!”+x.ToString(),“error”);}}其中“添加”按鈕的“單擊”事件代碼為:privatevoidbutton2_Click(objectsender,System.EventArgse){try{stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\book.mdb";OleDbConnectionmyConn=newOleDbConnection(strCon);myConn.Open();stringstrCom="INSERTINTObook(編號(hào),書(shū)名,作者,價(jià)格,書(shū)架號(hào))VALUES('"+this.textBox2.Text+"','"+this.textBox3.Text+"','"+this.textBox4.Text+"',"+this.textBox5.Text+","+this.textBox6.Text+")";OleDbCommandinst=newOleDbCommand(strCom,myConn);inst.ExecuteNonQuery();OleDbDataAdaptermyCommand=newOleDbDataAdapter("SELECT*FROMbookorderby編號(hào)",myConn);myDataSet.Clear();myCommand.Fill(myDataSet,"book");myConn.Close();}catch(Exceptionx){MessageBox.Show("錯(cuò)誤"+x.ToString(),"error"); }}其中“刪除”按鈕的“單擊”事件代碼為:privatevoidbutton3_Click(objectsender,System.EventArgse){try{inta=this.dataGrid1.CurrentCell.RowNumber;
stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\book.mdb";OleDbConnectionmyConn=newOleDbConnection(strCon);myConn.Open();
stringstrCom=“DELETEFrombookwhere編號(hào)="strCom+=this.myDataSet.Tables[0].Rows[a][0];OleDbCommanddelst=newOleDbCommand(strCom,myConn);delst.ExecuteNonQuery();OleDbDataAdaptermyCommand=newOleDbDataAdapter("SELECT*FROMBookorderby編號(hào)",myConn);myDataSet.Clear();myCommand.Fill(myDataSet,"book");myConn.Close();}catch(Exceptionx){MessageBox.Show("錯(cuò)誤"+x.ToString(),"error");}}其中“修改”按鈕的“單擊”事件代碼為(這里一次只能修改一行):privatevoidbutton4_Click(objectsender,System.EventArgse){try{inta=this.dataGrid1.CurrentCell.RowNumber;
stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:\\book.mdb";OleDbConnectionmyConn=newOleDbConnection(strCon);myConn.Open();stringstrCom=“UPDATEbookset書(shū)名=‘“+this.myDataSet.Tables[”book“].Rows[a][1]+”’,作者=‘“+this.myDataSet.Tables[”book“].Rows[a][2]+”’,價(jià)格=“+this.myDataSet.Tables[”book“].Rows[a][3]+”,書(shū)架號(hào)=“+this.myDataSet.Tables[”book“].Rows[a][4]+”where編號(hào)="+this.myDataSet.Tables["book"].Rows[a][0];OleDbCommandinst=newOleDbCommand(strCom,myConn);inst.ExecuteNonQuery();OleDbDataAdaptermyCommand=newOleDbDataAdapter("SELECT*FROMbookorderby編號(hào)",myConn);this.myDataSet.Clear();myCommand.Fill(myDataSet,"book");myConn.Close();}catch(Exceptionx){MessageBox.Show("錯(cuò)誤"+x.ToString(),"error");}}“修改”多行按鈕的“單擊”事件代碼為:privatevoidbutton2_Click(objectsender,System.EventArgse){try{stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;Datasource=F:\\student.mdb";OleDbConnectionmyconn=newOleDbConnection(strCon);stringupstr;OleDbCommandinst;myconn.Open();inta=this.myDataSet.Tables[0].Rows.Count;this.textBox1.Text=a.ToString();for(inti=0;i<a;i++){upstr=“updatestudentset姓名=‘”+this.myDataSet.Tables[0].Rows[i][1];upstr+=“’,語(yǔ)文=”+this.myDataSet.Tables[0].Rows[i][2]+“,數(shù)學(xué)upstr+=“,數(shù)學(xué)=”+this.myDataSet.Tables[0].Rows[i][3]+“,英語(yǔ)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年成人高等學(xué)校招生考試《語(yǔ)文》寫作素材積累題庫(kù)-名人名言篇試題
- 2025年阿拉伯語(yǔ)水平測(cè)試模擬試卷:專業(yè)術(shù)語(yǔ)與行業(yè)詞匯解析
- 2025年軟件設(shè)計(jì)師專業(yè)考試模擬試卷:Web前端開(kāi)發(fā)與JavaScript試題
- 2025年長(zhǎng)沙貨運(yùn)叢業(yè)資格證試題及答案
- 石頭碎石施工方案
- 2025年六安貨運(yùn)從業(yè)資格證好考嗎
- 名著導(dǎo)讀:《愛(ài)麗絲漫游奇境》思維導(dǎo)圖+章節(jié)概括
- 戴小橋全傳測(cè)試題及答案
- 施工框架協(xié)議和施工合同
- 荊州合同協(xié)議翻譯
- 西方國(guó)際關(guān)系理論知到章節(jié)答案智慧樹(shù)2023年國(guó)際關(guān)系學(xué)院
- 重癥肝炎護(hù)理查房
- 中國(guó)建設(shè)工程造價(jià)管理協(xié)會(huì)《建設(shè)工程造價(jià)鑒定規(guī)程》
- 高鐵站房精裝修施工方案
- 中西文化差異圖解PPT
- 明修棧道暗渡陳倉(cāng)
- 課程設(shè)計(jì)(集裝箱專用平車總體設(shè)計(jì))
- 人工挖土方注意事項(xiàng)
- 2022年應(yīng)急救援安全應(yīng)知應(yīng)會(huì)考試題庫(kù)(500題)
- GB/T 8162-2018結(jié)構(gòu)用無(wú)縫鋼管
- GB/T 39712-2020快速施工用海工硫鋁酸鹽水泥
評(píng)論
0/150
提交評(píng)論