版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、中國科學(xué)技術(shù)大學(xué)網(wǎng)絡(luò)學(xué)院中國科學(xué)技術(shù)大學(xué)網(wǎng)絡(luò)學(xué)院1數(shù)據(jù)庫編程數(shù)據(jù)庫編程-連接數(shù)據(jù)庫連接數(shù)據(jù)庫第六章第六章2本章目標(biāo)本章目標(biāo)了解了解ADO.NET 結(jié)構(gòu)結(jié)構(gòu)了解了解ADO.NET 的組件的組件使用使用Command 對象和對象和 Connection 對象對象使用使用ADO.NET 進(jìn)行事務(wù)處理進(jìn)行事務(wù)處理3ADO.NET 簡介簡介 2-1中央數(shù)據(jù)庫中央數(shù)據(jù)庫用戶需要時(shí),可以隨時(shí)訪問數(shù)據(jù)用戶計(jì)算機(jī)向數(shù)據(jù)庫服務(wù)器發(fā)送請求客戶端不同的訪問方法和技術(shù)4ADO.NET 簡介簡介 2-2.NET FrameworkSystem.Data 命名空間以 ActiveX 數(shù)據(jù)對象 (ADO) 為基礎(chǔ)以 XML(
2、擴(kuò)展標(biāo)記語言)為格式傳送和接收數(shù)據(jù)5ADO.NET 的優(yōu)點(diǎn)的優(yōu)點(diǎn)互操作性互操作性性能性能可伸縮性可伸縮性標(biāo)準(zhǔn)化標(biāo)準(zhǔn)化可編程能力可編程能力6ADO.NET 對數(shù)據(jù)庫的訪問對數(shù)據(jù)庫的訪問(3-1)將數(shù)據(jù)傳遞到用戶界面時(shí), ADO.NET 采用 XML 格式數(shù)據(jù)已緩存7ADO.NET 對數(shù)據(jù)庫的訪問對數(shù)據(jù)庫的訪問(3-2)對于Insert,Update,Delete 等單向操作 1、用Connection.Open打開數(shù)據(jù)庫2、用DataAdaptor.Command或者 Command.Execute 執(zhí)行命令3、關(guān)閉數(shù)據(jù)庫Insert用InsertCommandDelete 用DeleteCom
3、mandUpdate用UpdateCommand8ADO.NET 對數(shù)據(jù)庫的訪問對數(shù)據(jù)庫的訪問(3-3) 關(guān)閉數(shù)據(jù)庫1、用Connection .Open建立連接2、用DataAdaptor.SelectCommand 執(zhí)行命令DataAdaptor.Fill對于對于Select的雙向操作的雙向操作 DataSet9.NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序 5-1ConnectionCommandDataReaderDataAdapterADO.NETDataSet.NET Framework 數(shù)據(jù)提供程序數(shù)據(jù)提供程序 1、SQLClient2、OLEDB3、Oracle4、ODBC由以下各項(xiàng)組成的
4、集合:10.NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序 5-2 客戶端服務(wù)器數(shù)據(jù)集2、將數(shù)據(jù)發(fā)送到數(shù)據(jù)集將數(shù)據(jù)發(fā)送到數(shù)據(jù)集A、客戶端修改數(shù)據(jù)集客戶端修改數(shù)據(jù)集3、數(shù)據(jù)集傳遞給客戶端數(shù)據(jù)集傳遞給客戶端B、將修改后的數(shù)據(jù)將修改后的數(shù)據(jù)集傳遞給服務(wù)器集傳遞給服務(wù)器1、客戶端從服務(wù)器請求數(shù)據(jù)客戶端從服務(wù)器請求數(shù)據(jù)1,2,3是從服務(wù)器檢索數(shù)據(jù)的過程A、B是對數(shù)據(jù)庫修改的過程11.NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序 5-3用于用于 SQL Server 的的 .NET Framework 數(shù)據(jù)提供程序數(shù)據(jù)提供程序System.Data.SqlClient 命名空間僅限于連接 SQL Server 數(shù)據(jù)庫 7.0 或更
5、高版本12.NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序 5-4用于用于 OLEDB 的的 .NET Framework 數(shù)據(jù)提供程序數(shù)據(jù)提供程序13.NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序 5-5用于用于 ODBC 的的 .NET Framework 數(shù)據(jù)提供程序的命名空間數(shù)據(jù)提供程序的命名空間用于用于 Oracle 的的 .NET Framework 數(shù)據(jù)提供程序的命名空間數(shù)據(jù)提供程序的命名空間System.Data.Odbc 命名空間System.Data.OracleClient 命名空間14知識點(diǎn)小結(jié)知識點(diǎn)小結(jié)使用的名稱空間使用的名稱空間SQL Serverusing System.Data.SqlC
6、lient OLE DB using System.Data.OleDb Oracle using System.Data.OracleClientODBCusing System.Data.Odbc15為什么使用為什么使用 Connection應(yīng)用程序應(yīng)用程序請求數(shù)據(jù)請求數(shù)據(jù)Connection橋梁橋梁16示例示例1 代碼分析代碼分析關(guān)鍵代碼回顧關(guān)鍵代碼回顧/ 數(shù)據(jù)庫連接字符串?dāng)?shù)據(jù)庫連接字符串string connString = Data Source= . ;Initial Catalog=MySchool;User ID=sa;/ 創(chuàng)建創(chuàng)建 Connection 對象對象SqlConn
7、ection connection = new SqlConnection(connString); / 打開數(shù)據(jù)庫連接打開數(shù)據(jù)庫連接connection.Open();MessageBox.Show(打開數(shù)據(jù)庫連接成功打開數(shù)據(jù)庫連接成功); / 關(guān)閉數(shù)據(jù)庫連接關(guān)閉數(shù)據(jù)庫連接connection.Close();MessageBox.Show(關(guān)閉數(shù)據(jù)庫連接成功關(guān)閉數(shù)據(jù)庫連接成功);表示本機(jī)表示本機(jī)17Connection 主要成員主要成員必須顯式關(guān)閉連接必須顯式關(guān)閉連接屬性屬性說明說明ConnectionString 連接字符串連接字符串方法方法說明說明Open打開數(shù)據(jù)庫連接打開數(shù)據(jù)庫連接C
8、lose關(guān)閉數(shù)據(jù)庫連接關(guān)閉數(shù)據(jù)庫連接18連接數(shù)據(jù)庫步驟連接數(shù)據(jù)庫步驟連接數(shù)據(jù)庫的步驟:連接數(shù)據(jù)庫的步驟:1、定義連接字符串、定義連接字符串2、創(chuàng)建、創(chuàng)建 Connection 對象對象3、打開與數(shù)據(jù)庫的連接、打開與數(shù)據(jù)庫的連接Data Source=服務(wù)器名服務(wù)器名;Initial Catalog=數(shù)據(jù)庫名數(shù)據(jù)庫名; User ID=用戶名用戶名;Pwd=密碼密碼SqlConnection connection = new SqlConnection(connString);連接字符串連接字符串connection.Open( );沒有密碼,可省略沒有密碼,可省略19Connection 對象
9、對象命名空間命名空間對應(yīng)的對應(yīng)的 Connection 對象對象System.Data.SqlClient SqlConnectionSystem.Data.OleDbOleDbConnectionSystem.Data.Odbc OdbcConnectionSystem.Data.OracleClientOracleConnection不同命名空間的不同命名空間的 Connection 對象對象20小結(jié)小結(jié)連接到本機(jī)的連接到本機(jī)的 pubs 數(shù)據(jù)庫數(shù)據(jù)庫/ 連接字符串連接字符串string connString = Data Source=.;Initial Catalog=pubs;Use
10、r ID=sa;/ 創(chuàng)建創(chuàng)建Connection 對象對象 SqlConnection connection = new SqlConnection(connString);connection.Open( ); / 打開數(shù)據(jù)庫連接打開數(shù)據(jù)庫連接connection.Close( ); / 關(guān)閉數(shù)據(jù)庫連接關(guān)閉數(shù)據(jù)庫連接關(guān)鍵代碼關(guān)鍵代碼21為什么使用為什么使用 Command應(yīng)用程序應(yīng)用程序打開數(shù)據(jù)庫打開數(shù)據(jù)庫處理數(shù)據(jù)處理數(shù)據(jù)Connection怎樣處理數(shù)據(jù)怎樣處理數(shù)據(jù)執(zhí)行命令并從數(shù)據(jù)源中返回結(jié)果執(zhí)行命令并從數(shù)據(jù)源中返回結(jié)果 22Command 的主要成員的主要成員屬性屬性說明說明Connect
11、ion Command對象使用的數(shù)據(jù)庫連接對象使用的數(shù)據(jù)庫連接CommandText執(zhí)行的執(zhí)行的SQL語句語句方法方法說明說明 ExecuteNonQuery執(zhí)行不返回行的語句,如執(zhí)行不返回行的語句,如UPDATE等等ExecuteReader返回返回DataReader對象對象ExecuteScalar返回單個(gè)值,如執(zhí)行返回單個(gè)值,如執(zhí)行COUNT(*)23使用使用 Command 步驟步驟使用使用Command步驟:步驟:1、創(chuàng)建數(shù)據(jù)庫連接、創(chuàng)建數(shù)據(jù)庫連接2、定義、定義 SQL 語句語句3、創(chuàng)建、創(chuàng)建 Command 對象對象4、執(zhí)行命令、執(zhí)行命令SqlConnection connect
12、ion = new SqlConnection(connString);string sql = SELECT COUNT(*) FROM Student;connection.Open();/ 打開數(shù)據(jù)庫連接打開數(shù)據(jù)庫連接SqlCommand command = new SqlCommand(sql, connection);int num = (int)command.ExecuteScalar();執(zhí)行命令前,必須打開數(shù)據(jù)庫連接!執(zhí)行命令前,必須打開數(shù)據(jù)庫連接!要進(jìn)行類型轉(zhuǎn)換!要進(jìn)行類型轉(zhuǎn)換!24Command 對象對象用用SQL 語句的語句的Command設(shè)置設(shè)置SqlCommand
13、Comm=new SqlCommand();Comm.CommandText=SQL 語句語句;Comm.CommandType=CommandType.Text ;Comm. Connection=sqlConn;用存儲過程的用存儲過程的Command設(shè)置設(shè)置SqlCommand Comm=new SqlCommand();Comm.CommandText=sp_UpdateName;Comm.CommandType=CommandType. StoredProcedure ;Comm. Connection=sqlConn;其中,其中,Sp_UpdateName是在是在SQL Server
14、服務(wù)器上創(chuàng)建的存儲過程服務(wù)器上創(chuàng)建的存儲過程25綜合示例綜合示例完成系統(tǒng)登錄功能完成系統(tǒng)登錄功能1、驗(yàn)證管理員的用戶名和密碼是否存在、驗(yàn)證管理員的用戶名和密碼是否存在2、驗(yàn)證通過,顯示管理員主窗體、驗(yàn)證通過,顯示管理員主窗體處理登錄按鈕的處理登錄按鈕的 Click 事件事件定義一個(gè)定義一個(gè) ValidateUser() 方法方法需要需要 Connection 和和 Command 對象對象分兩步實(shí)現(xiàn)驗(yàn)證分兩步實(shí)現(xiàn)驗(yàn)證:1、建立數(shù)據(jù)庫連接、建立數(shù)據(jù)庫連接2、驗(yàn)證用戶是否存在、驗(yàn)證用戶是否存在 26用戶驗(yàn)證方法框架用戶驗(yàn)證方法框架ValidateUser() 方法框架方法框架1、驗(yàn)證的結(jié)果:通過,
15、不通過、驗(yàn)證的結(jié)果:通過,不通過返回值為返回值為 bool 型型2、方法需要:、方法需要: 用戶名,密碼,登錄類型用戶名,密碼,登錄類型值方式傳參值方式傳參3、不通過的原因:、不通過的原因: 用戶名或密碼不存在、其他原因用戶名或密碼不存在、其他原因引用方式傳參引用方式傳參public bool ValidateUser(string loginType, string loginId, string loginPwd, ref string message) 27用戶驗(yàn)證方法具體實(shí)現(xiàn)用戶驗(yàn)證方法具體實(shí)現(xiàn)第一步:建立數(shù)據(jù)庫連接第一步:建立數(shù)據(jù)庫連接增加增加 DBHelper 類類第二步:查詢用戶
16、是否存在第二步:查詢用戶是否存在SELECT COUNT(*)ExecuteScalar() 方法查詢方法查詢ValidateUser() 方法具體實(shí)現(xiàn)方法具體實(shí)現(xiàn)28小結(jié)小結(jié)/ 查詢查詢 Student 表使用的表使用的 SQL 語句語句string sql = string.Format( SELECT COUNT(*) FROM Student WHERE LogInId=0 AND LogInPwd=1,txtLogInId, txtLogInPwd);/ 使用的使用的 Command 對象對象SqlCommand command = new SqlCommand(sql, DBHel
17、per.connection);DBHelper.connection.Open();/ 執(zhí)行查詢,返回找到的個(gè)數(shù)執(zhí)行查詢,返回找到的個(gè)數(shù)count = (int)command.ExecuteScalar();增加驗(yàn)證用戶的代碼增加驗(yàn)證用戶的代碼29總結(jié)總結(jié)Connection 對象的什么方法用來打開和關(guān)閉數(shù)據(jù)庫連接?對象的什么方法用來打開和關(guān)閉數(shù)據(jù)庫連接?ExecuteScalar()方法返回什么?方法返回什么?30知識點(diǎn)小結(jié)知識點(diǎn)小結(jié)Connection對象的作用對象的作用Connection對象的兩種使用方法對象的兩種使用方法拖拉控件拖拉控件寫代碼寫代碼四種典型的連接方式的應(yīng)用名稱空間
18、和連接字符串的寫法四種典型的連接方式的應(yīng)用名稱空間和連接字符串的寫法SqlConnectionOleDbConnectionOracleConnectionOdbcConnection31.NET 中的事務(wù)處理中的事務(wù)處理 3-1帳單帳單編編號號 說明說明數(shù)量數(shù)量價(jià)格價(jià)格總計(jì)總計(jì)1肥皂肥皂520 100編號:編號:12439日期:日期: 2004年年10月月30日日肥皂肥皂關(guān)系表關(guān)系表數(shù)據(jù)庫512439124392004 年年 10 月月 30 日日已成功地完成對一個(gè)表的操作,但是關(guān)系表尚未更新,因此,數(shù)據(jù)會(huì)出現(xiàn)不一致的現(xiàn)象成功地進(jìn)行整個(gè)操作或者取消整個(gè)操作 確保事務(wù)處理是一組數(shù)據(jù)操作,這些操
19、作要么必須全部成功,要么必須全部失敗,以保證數(shù)據(jù)的一致性和完整性32.NET 中的事務(wù)處理中的事務(wù)處理 3-2lBegin: 在執(zhí)行事務(wù)處理中的任何操作之前,必須使用 Begin 命令來開始事務(wù)處理lCommit: 在成功將所有修改都存儲于數(shù)據(jù)庫時(shí),才算是提交了事務(wù)處理lRollback: 由于在事務(wù)處理期間某個(gè)操作失敗,而取消事務(wù)處理已做的所有修改,這時(shí)將發(fā)生回滾事務(wù)處理命令事務(wù)處理命令33.NET 中的事務(wù)處理中的事務(wù)處理 3-3類說明OdbcTransaction表示對數(shù)據(jù)源進(jìn)行的表示對數(shù)據(jù)源進(jìn)行的 SQL 事務(wù)處理事務(wù)處理OleDbTransaction表示對數(shù)據(jù)源進(jìn)行的表示對數(shù)據(jù)源進(jìn)
20、行的 SQL 事務(wù)處理事務(wù)處理OracleTransaction表示對數(shù)據(jù)庫進(jìn)行的事務(wù)處理表示對數(shù)據(jù)庫進(jìn)行的事務(wù)處理SqlTransaction表示要對表示要對 SQL Server 數(shù)據(jù)庫進(jìn)行的數(shù)據(jù)庫進(jìn)行的 Transact-SQL 事務(wù)處理事務(wù)處理34SqlTransaction 類類 3-1方法方法屬性屬性Save( )Rollback( )Commit( )ConnectionSqlTransaction 類表示要對數(shù)據(jù)源進(jìn)行的事務(wù)處理35SqlTransaction 類類 3-2在 ADO.NET 中實(shí)現(xiàn)事務(wù)處理時(shí)執(zhí)行的步驟順序SqlConnection sqlConn = new
21、SqlConnection(server=SQLDB; uid=sa; pwd=sa; database=pubs);sqlConn.Open();創(chuàng)建數(shù)據(jù)庫連接并打開該連接SqlTransaction sqlTrans = sqlConn.BeginTransaction();使用 BeginTransaction() 方法開始事務(wù)處理36SqlTransaction 類類 3-3Comm.Transaction = sqlTrans; 將 Command 對象的 Transaction 屬性設(shè)置為事務(wù)處理對象 insertCommand = Insert into Student (Id,
22、 Name)values (200494012, “WangLi);Comm.CommandText = insertCommand;Comm.ExecuteNonQuery ();執(zhí)行 SQL 命令sqlTrans.Commit();如果操作過程中沒有錯(cuò)誤,則提交事務(wù)處理。如果操作過程中發(fā)生錯(cuò)誤,則回滾已完成的所有修改sqlConn.Close(); 關(guān)閉連接37應(yīng)用程序示例應(yīng)用程序示例 7-1在 VS.NET 2005 中新建一個(gè)名為Example1 的基于 Windows 的項(xiàng)目。將默認(rèn)窗體命名為 frmFlight.cs用戶界面用戶界面38應(yīng)用程序示例應(yīng)用程序示例 7-2控件名稱屬性值
23、FormfrmFlightText航班詳細(xì)信息航班詳細(xì)信息ButtonbutAddText添加添加(&A) butModifyText修改修改(&M)butDeleteText刪除刪除(&D)butCancelText取消取消(&C)LabellblFlightNoText航班號:航班號:lblAirlineText航空公司:航空公司:lblDestinationText終到站:終到站:lblSourceText始發(fā)站:始發(fā)站:lblDepartureText起飛:起飛:lblArrivalText到達(dá):到達(dá):ComboBoxcboSeatsText座位數(shù)量:座位數(shù)量:39應(yīng)用程序示例應(yīng)用程序
24、示例 7-3/ Connection 對象和 Command 對象private SqlConnection sqlConn;private SqlCommand sqlComm; / 類變量private string instrCmd;private string modCmd;private string delCmd;private void frmFlight_Load(object sender, System.EventArgs e) / 初始化 connection 對象 sqlConn = new SqlConnection (server = jeny; database
25、= Flights; uid = sa; pwd = sa); / 將座位數(shù)量添加到組合框中 this.cboSeats.Items.Clear(); this.cboSeats.Items.Add(“200); this.cboSeats.Items.Add(“250); this.cboSeats.Items.Add(“300); this.btnModify.Enabled = false; this.btnDelete.Enabled = false;給組合框添加項(xiàng)并禁用按鈕初始化 connection 對象40應(yīng)用程序示例應(yīng)用程序示例 7-4private void btnAdd_C
26、lick(object sender, System.EventArgs e)/ 插入命令 instrCmd = insert into FlightDetails values (+this.txtFlightCode.Text+, +this.txtAirline.Text+,“ +this.txtDestination.Text+, “+this.txtSource.Text+,“ +this.txtArrival.Text+, +this.txtDeparture.Text+, “ +this.cboSeats.SelectedItem.ToString()+);/ 初始化 comma
27、nd 對象 sqlComm = new SqlCommand(instrCmd, sqlConn);將插入命令和 connection 對象傳遞給 command 對象btnAdd Click 事件處理程序 41應(yīng)用程序示例應(yīng)用程序示例 7-5try / 打開連接 sqlConn.Open(); / 執(zhí)行插入語句 sqlComm.ExecuteNonQuery(); MessageBox.Show(“已成功添加記錄); / 啟用和禁用按鈕 this.btnModify.Enabled = true; this.btnDelete.Enabled = true; this.btnAdd.Enab
28、led = false; this.txtFlightCode.Enabled = false;catch(SqlException ex) MessageBox.Show(ex.Message);finally / 關(guān)閉連接sqlConn.Close();打開連接并執(zhí)行 sqlComm 中的命令btnAdd Click 事件處理程序 42應(yīng)用程序示例應(yīng)用程序示例 7-6private void btnModify_Click(object sender, System.EventArgs e)modCmd = update FlightDetails set Airline = “+this
29、.txtAirline.Text+, Destination = “+this.txtDestination.Text+,Source = +this.txtSource.Text+, Arrival = +this.txtArrival.Text+, Departure = +this.txtDeparture.Text+, TotalSeats = +this.cboSeats.SelectedItem.ToString()+ where FlightCode like +this.txtFlightCode.Text+;sqlComm = new SqlCommand(modCmd, sqlConn);trysqlConn.Open();sqlComm.ExecuteNonQuery();MessageBox.Show(“已成功更新記錄);catch(SqlException ex) MessageBox.Show(ex.Message);finally sqlConn.Close();設(shè)置更新命令btnModify Click
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)一年級作文未來的房子(10篇)
- ?小學(xué)一年級課外閱讀小故事(二十篇)
- 小學(xué)數(shù)學(xué)六年級下冊3 1《圓柱》同步練習(xí)
- Tenuifolin-Standard-生命科學(xué)試劑-MCE
- Suksdorfin-生命科學(xué)試劑-MCE
- 天津市2024年高考地理壓軸卷含解析
- 2025屆高考英語3500詞匯基礎(chǔ)+提升練09含解析
- 2025版高中數(shù)學(xué)一輪復(fù)習(xí)課時(shí)作業(yè)梯級練三十八等差數(shù)列及其前n項(xiàng)和課時(shí)作業(yè)理含解析新人教A版
- 2023屆新高考新教材化學(xué)人教版一輪學(xué)案-第十章第3講 熱點(diǎn)綜合實(shí)驗(yàn)探究
- 玉溪師范學(xué)院《城市規(guī)劃原理》2022-2023學(xué)年第一學(xué)期期末試卷
- 大班科學(xué)《球體和圓柱體》
- 2024土石壩安全監(jiān)測技術(shù)規(guī)范
- 【課件】2024屆高三英語高考前指導(dǎo)最后一課(放松心情)課件
- 食管癌圍手術(shù)期護(hù)理教學(xué)查房
- 2024年河南投資集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 2024年院感安全注射培訓(xùn)
- 中國電信未來五年信息化發(fā)展規(guī)劃方案出臺
- 孩子分為四種:認(rèn)知型、模仿型、逆思型、開放型
- 小班故事《快樂的輪胎》課件
- 在線網(wǎng)課知慧《大涼山精準(zhǔn)脫貧(西昌學(xué)院)》單元測試考核答案
- 安全評價(jià)通則AQ8001-2007
評論
0/150
提交評論