第8章 .NET數(shù)據(jù)庫編程_第1頁
第8章 .NET數(shù)據(jù)庫編程_第2頁
第8章 .NET數(shù)據(jù)庫編程_第3頁
第8章 .NET數(shù)據(jù)庫編程_第4頁
第8章 .NET數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

重點內(nèi)容:

ADO.NET

連接數(shù)據(jù)庫讀取數(shù)據(jù)

DataReader

填充數(shù)據(jù)集第8章ADO.NET數(shù)據(jù)庫編程一、ADO.NET在ASP.NET應(yīng)用程序中訪問數(shù)據(jù)庫要通過ADO.NET來實現(xiàn)。ADO.NET又被稱為ActiveX數(shù)據(jù)對象(ActiveXDataObject),是從Web的角度對ADO進(jìn)行檢討和改進(jìn)的。ADO.NET是為了因應(yīng)廣泛的數(shù)據(jù)控制而設(shè)計,所以使用起來比以前的ADO更靈活有彈性,也提供了更多的功能。ADO.NET對象模型中有五個主要的組件,分別是Connection、Command、DataSetCommand、DataSet以及DataReader。在ADO.NET對象模型中,DataSet(數(shù)據(jù)集)是最重要的對象。一般來說,一個DataSet對象就是一個記錄集的集合,可以通過命令用數(shù)據(jù)集合填充DataSet對象。ADO.NET提供了記錄集的所有數(shù)據(jù)庫功能,包括排序,分頁,過濾視圖,關(guān)系,索引,和主鍵等??梢杂肵ML形式保持或傳輸任何DataSet對象,而且無需付出任何額外的代價,因為DataSet對象本身就是按照XML格式構(gòu)造。Connection、Command、DataSetCommand以及DataReader是數(shù)據(jù)操作組件(ManagedProviders),負(fù)責(zé)建立聯(lián)機(jī)和數(shù)據(jù)操作。數(shù)據(jù)操作組件的主要功能是作為DataSet和數(shù)據(jù)源之間的橋梁,其主要功能是負(fù)責(zé)將數(shù)據(jù)源中的數(shù)據(jù)取出后填充到DataSet數(shù)據(jù)集中,或者將數(shù)據(jù)存回數(shù)據(jù)源。為了更好地支持?jǐn)嚅_模型,ADO.NET組件將數(shù)據(jù)訪問與數(shù)據(jù)處理分離。它是通過兩個主要的組件:.NET數(shù)據(jù)提供程序(dataprovider)和Dataset來完成這一操作的。

1、組件結(jié)構(gòu)一、ADO.NET一、ADO.NET1、組件結(jié)構(gòu)ADO.NET體系結(jié)構(gòu)的一個核心元素是.NET數(shù)據(jù)提供程序,它是專門為數(shù)據(jù)處理以及快速地只進(jìn)、只讀訪問數(shù)據(jù)而設(shè)計的組件。它是包括Connection、Command、DataReader和DataAdapter對象的組件。對象名稱描述Connection提供與數(shù)據(jù)源的連接Command用于返回數(shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令。DataReader從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流DataAdapter提供連接DataSet對象和數(shù)據(jù)源的橋梁,使用Command對象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet中,并使對DataSet中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致。二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(1)打開MicrosoftSQLServerManagementStudio,彈出“連接到服務(wù)器”對話框,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(2)讀者選擇合適的服務(wù)器名稱和身份驗證方式后,在“連接到服務(wù)器”對話框單擊“連接”按鈕,連接到SQLServer服務(wù)器。連接成功后,進(jìn)入程序的主界面,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(3)在“對象資源管理器”中右鍵單擊“數(shù)據(jù)庫”,從彈出的上下文菜單中選擇“新建數(shù)據(jù)庫”命令,彈出如圖所示的對話框。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(4)在“數(shù)據(jù)庫名稱”中輸入讀者想要創(chuàng)建的數(shù)據(jù)庫,這里輸入的名稱為SuperMarket,單擊“確定”按鈕創(chuàng)建SuperMarket數(shù)據(jù)庫。此時讀者會發(fā)現(xiàn)在“對象資源管理器”的“數(shù)據(jù)庫”節(jié)點中增加了一個名為SuperMarket的數(shù)據(jù)庫,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(5)展開SuperMarket節(jié)點,右鍵單擊“表”節(jié)點,開始進(jìn)行表編輯操作,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(6)在右側(cè)的屬性窗體中把表的名稱改為Product,然后在編輯表的窗體中加入4列,最終結(jié)果如圖所示。

(7)右鍵單擊“編號”列,在彈出的上下文菜單在那個選擇“設(shè)置主鍵”命令,“編號”成為該表的主鍵。此時該表如圖8-8所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(8)在“對象資源管理器”中右鍵單擊SuperMarket數(shù)據(jù)庫的product表,從彈出的上下文菜單中選擇“打開表”命令,向表中輸入記錄。該表中的記錄如圖所示。

二、連接數(shù)據(jù)庫2、連接SQLServer數(shù)據(jù)庫SQLServer.NETFramework數(shù)據(jù)提供程序使用SqlConnection對象提供與MicrosoftSQLServer的7.0版或它的更高版本的連接。SqlConnection的構(gòu)造函數(shù)定義如下所示。publicSqlConnection(stringconnectionString);其中,參數(shù)connectionString指定了用于打開SQLServer數(shù)據(jù)庫的連接。程序清單8.1所示的代碼示例演示了使用SqlConnection對象如何創(chuàng)建和打開數(shù)據(jù)庫連接。使用SqlConnection對象建和打開數(shù)據(jù)庫連接:stringConnStr="server=localhost;IntegratedSecurity=True; database=SuperMarket;";SqlConnection

sqlConn=newSqlConnection(ConnStr);sqlConn.Open();二、連接數(shù)據(jù)庫2、連接SQLServer數(shù)據(jù)庫通過VisualStudio的可視化的界面進(jìn)行設(shè)置連接字符串首先要在Web頁面中添加一個SqlDataSource對象,然后在屬性編輯器中選擇ConnectionString屬性,再新建一個連接,在彈出的“選擇數(shù)據(jù)源”對話框中選擇“MicrosoftSQLServer”,如圖所示。

二、連接數(shù)據(jù)庫3、連接Access數(shù)據(jù)庫用于連接Access數(shù)據(jù)庫是AccessDataSource控件,該控件繼承自SqlDataSource控件,但是該類不支持連接到受用戶名或密碼保護(hù)的Access數(shù)據(jù)庫。因此這里還是通過SqlDataSource控件來實現(xiàn)可視化連接數(shù)據(jù)庫。首先,創(chuàng)建一個受密碼保護(hù)的Access數(shù)據(jù)庫文件Northwind.mdb,該數(shù)據(jù)庫包含一個名為“運(yùn)貨商”的表,該表的內(nèi)容如圖所示。

二、連接數(shù)據(jù)庫3、連接Access數(shù)據(jù)庫然后創(chuàng)建一個名為OleDbTest.aspx的網(wǎng)頁,在Web頁面上添加SqlDataSource控件后,在屬性編輯器中選擇ConnectionString屬性,再新建一個連接,在彈出的“選擇數(shù)據(jù)源”對話框中選擇“MicrosoftAccess數(shù)據(jù)庫文件”,然后單擊“繼續(xù)”按鈕,彈出“添加連接”對話框,如圖所示。

三、讀取數(shù)據(jù)1、使用SqlCommand類SqlCommand類可以用來對SQLServer數(shù)據(jù)庫執(zhí)行的一個Transact-SQL語句或存儲過程。SqlCommand類的CommandText屬性用于獲取或設(shè)置要對數(shù)據(jù)源執(zhí)行的Transact-SQL語句或存儲過程。CommandTimeout屬性用于設(shè)置獲取或設(shè)置在終止執(zhí)行命令的嘗試并生成錯誤之前的等待時間。如果SQL語句或者存儲過程中使用了參數(shù),可以通過Parameter屬性為參數(shù)設(shè)置值。SqlCommand命令對象提供了以下幾個基本方法來執(zhí)行命令:ExecuteNonQuery:可以通過該命令來執(zhí)行不需要返回值的操作,例如UPDATE、INSERT和DELETE等SQL命令。該命令不返回任何行,而只是返回執(zhí)行該命令時所影響到的表行數(shù)。ExecuteScalar:它可以執(zhí)行SELECT查詢,但返回的是一個單值,多用于查詢聚合值的情況,如使用count()或者sum()函數(shù)的SQL命令。ExecuteReader:該方法返回一個DataReader對象,內(nèi)容為與命令匹配的所有行。三、讀取數(shù)據(jù)1、使用SqlCommand類示例:演示如何使用SqlCommand類操作數(shù)據(jù)庫

添加一個名為SqlCmdTest.aspx,在該網(wǎng)頁的代碼文件中添加代碼:運(yùn)行效果三、讀取數(shù)據(jù)2、使用OleDBCommand類OleDBCommand的使用方法和SqlCommand非常類似,由于上一節(jié)已經(jīng)介紹了如何編輯數(shù)據(jù),這里就不再贅述。下面介紹如何在數(shù)據(jù)庫文件Northwind.mdb中,進(jìn)行查找記錄的操作。代碼如下:

三、讀取數(shù)據(jù)2、使用OleDBCommand類1.protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\\ZhouMingHui\\ASP.NET2.0簡明教程\\代碼\\Northwind.mdb;Jet

OLEDB:DatabasePassword=111111";4.OleDbConnection

myConnection=newOleDbConnection(sqlconn);5.myConnection.Open();6.OleDbCommand

myCommand=newOleDbCommand("select*from運(yùn)貨商",myConnection);7.OleDbDataReader

myReader;8.myReader=myCommand.ExecuteReader();9.Response.Write("<h3>使用OleDbCommand類讀取數(shù)據(jù)</h3><hr>");10.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");11.Response.Write("<tr

bgcolor=#DAB4B4>");12.for(inti=0;i<myReader.FieldCount;i++)13.{14.Response.Write("<td>"+myReader.GetName(i)+"</td>");15.}16.Response.Write("</tr>");17.while(myReader.Read())18.{19.Response.Write("<tr>");20.for(inti=0;i<myReader.FieldCount;i++)21.{22.Response.Write("<td>"+myReader[i].ToString()+"</td>");23.}24.Response.Write("</tr>");25.}26.Response.Write("</table>");27.myReader.Close();28.myConnection.Close();29.}三、讀取數(shù)據(jù)3、使用存儲過程存儲過程(StoredProcedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程具有允許標(biāo)準(zhǔn)組件式編程、能夠?qū)崿F(xiàn)較快的執(zhí)行速度、能夠減少網(wǎng)絡(luò)流量等優(yōu)點。通過SqlCommand和OleDBCommand調(diào)用存儲過程時,首先需要將其CommandType屬性設(shè)置為CommandType.StoredProcedure,這表示要執(zhí)行的是一個存儲過程。屬性的默認(rèn)值為CommandType.Text,表示執(zhí)行SQL命令。另外該屬性值也可以設(shè)置為CommandType.TableDirect表示要直接訪問數(shù)據(jù)表,此時應(yīng)該把將CommandText屬性設(shè)置為要訪問的一個或多個表的名稱。

三、讀取數(shù)據(jù)3、使用存儲過程示例代碼:1.protectedvoidPage_Load(objectsender,EventArgse) 2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();6.SqlCommand

myCommand=newSqlCommand();7.myCommand.Connection=myConnection;8.myCommand.CommandType=CommandType.StoredProcedure;9.myCommand.CommandText="byType";

10.SqlParameter

parInput=myCommand.Parameters.Add("@type",SqlDbType.SmallMoney);11.parInput.Direction=ParameterDirection.Input;12.parInput.Value=2;13.SqlDataReader

myReader=myCommand.ExecuteReader();.14.Response.Write("<h3>使用存儲過程查詢數(shù)據(jù)</h3><hr>");15.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");17.Response.Write("<tr

bgcolor=#DAB4B4>");18.for(inti=0;i<myReader.FieldCount;i++)19.{20.Response.Write("<td>"+myReader.GetName(i)+"</td>");21.}22.Response.Write("</tr>");23.while(myReader.Read())24.{25.Response.Write("<tr>");26.for(inti=0;i<myReader.FieldCount;i++)27.{28.Response.Write("<td>"+myReader[i].ToString()+"</td>");29.}30.Response.Write("</tr>");31.}32.Response.Write("</table>");33.myReader.Close();34.myConnection.Close();35.}

三、填充數(shù)據(jù)集1、使用DataAdapter數(shù)據(jù)適配器DataAdapter表示一組數(shù)據(jù)命令和一個數(shù)據(jù)庫連接,它們用于填充DataSet

和更新數(shù)據(jù)源。DataAdapter經(jīng)常和DataSet一起配合使用,作為DataSet

和數(shù)據(jù)源之間的橋接器以便檢索和保存數(shù)據(jù)。下面是幾種數(shù)據(jù)庫使用數(shù)據(jù)適配器的方法:MicrosoftSQLServer數(shù)據(jù)庫:可以通過將SqlDataAdapter與其關(guān)聯(lián)的SqlCommand和SqlConnection對象一起使用,從而提高總體性能。對于支持OLEDB的數(shù)據(jù)源:使用DataAdapter及其關(guān)聯(lián)的OleDbCommand和OleDbConnection對象。對于支持ODBC的數(shù)據(jù)源:使用DataAdapter及其關(guān)聯(lián)的OdbcCommand和OdbcConnection對象。對于Oracle數(shù)據(jù)庫:使用DataAdapter及其關(guān)聯(lián)的OracleCommand和OracleConnection

對象。使用數(shù)據(jù)適配器SqlDataAdapter的一般步驟如下:(1)建立數(shù)據(jù)庫連接(2)建立SqlCommand對象,設(shè)置要執(zhí)行的SQL語句(3)建立并實例化一個SqlDataAdapter對象。如果要執(zhí)行的SQL語句為Delete,則設(shè)置DeleteCommand屬性為SqlCommand對象;如果要執(zhí)行的SQL語句為Insert,則設(shè)置InsertCommand屬性為SqlCommand對象;如果要執(zhí)行的SQL語句為Select,則設(shè)置SelectCommand屬性為SqlCommand對象;如果要執(zhí)行的SQL語句為Update,則設(shè)置UpdateCommand屬性為SqlCommand對象。(4)建立一個DataSet對象,用于接收執(zhí)行SQL命令返回的數(shù)據(jù)集(5)填充數(shù)據(jù)集(6)綁定數(shù)據(jù)控件(7)關(guān)閉數(shù)據(jù)庫連接四、DataReader可以使用ADO.NETDataReader從數(shù)據(jù)庫中檢索只讀、只進(jìn)的數(shù)據(jù)流。所謂“只讀”,是指在數(shù)據(jù)閱讀器DataReader上不可更新、刪除、增加記錄,所謂“只進(jìn)”是指記錄的接收是順序進(jìn)行且不可后退的,數(shù)據(jù)閱讀器DataReader接收到的數(shù)據(jù)是以數(shù)據(jù)庫的記錄為單位的。查詢結(jié)果在查詢執(zhí)行時返回,并存儲在客戶端的網(wǎng)絡(luò)緩沖區(qū)中,直到用戶使用DataReader的Read方法對它們發(fā)出請求。使用DataReader可以提高應(yīng)用程序的性能,原因是它只要數(shù)據(jù)可用就立即檢索數(shù)據(jù),并且(默認(rèn)情況下)一次只在內(nèi)存中存儲一行,減少了系統(tǒng)開銷。

四、DataReader1、使用DataReader使用DataReader對象的Read方法可從查詢結(jié)果中獲取行。通過向DataReader傳遞列的名稱或序號引用,可以訪問返回行的每一列。不過,為了實現(xiàn)最佳性能,DataReader

提供了一系列方法,使用戶能夠訪問其本機(jī)數(shù)據(jù)類型(GetDateTime、GetDouble、GetGuid、GetInt32等)的列值。DataReader

提供未緩沖的數(shù)據(jù)流,該數(shù)據(jù)流使過程邏輯可以有效地按順序處理從數(shù)據(jù)源中返回的結(jié)果。由于數(shù)據(jù)不在內(nèi)存中緩存,所以在檢索大量數(shù)據(jù)時,DataReader

是一種適合的選擇。當(dāng)DataReader首先被填充時,它將被定位到Null記錄,直至第一次調(diào)用它的Read方法。這種方法與傳統(tǒng)ADO邏輯中默認(rèn)情況下指向記錄集的第一條記錄是不同的。由于DataReader在執(zhí)行SQL命令時一直要保持同數(shù)據(jù)庫的連接,在DataReader對象在開啟的狀態(tài)下,DataReader將以獨占方式使用Connection,該對象所對應(yīng)的Connection連接對象不能用來執(zhí)行其它的操作,如果Command包含輸出參數(shù)或返回值,那么在DataReader關(guān)閉之前,將無法訪問這些輸出參數(shù)或返回值。所以在使用完DataReader對象時,一定要使用Close方法關(guān)閉該DataReader對象,否則的話不僅會影響到數(shù)據(jù)庫連接的效率,更會阻止其它對象使用Connection連接對象來訪問數(shù)據(jù)庫。如果返回的是多個結(jié)果集,DataReader會提供NextResult方法來按順序循環(huán)訪問這些結(jié)果集。當(dāng)DataReader打開時,可以使用GetSchemaTable方法檢索有關(guān)當(dāng)前結(jié)果集的架構(gòu)信息。GetSchemaTable返回一個填充了行和列的DataTable對象,這些行和列包含當(dāng)前結(jié)果集的架構(gòu)信息。對于結(jié)果集的每一列,DataTable都包含一行。架構(gòu)表行的每一列都映射到在結(jié)果集中返回的列的屬性,其中ColumnName是屬性的名稱,而列的值為屬性的值。四、DataReader2、示例示例:參見本書程序清單8.6.五、填充數(shù)據(jù)集1、使用DataAdapter示例:

頁面代碼:1.<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="DataAdapterTest.aspx.cs"Inherits="DataAdapterTest"%>2.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">3.<htmlxmlns="/1999/xhtml">4.<headrunat="server">5.<title>演示DataAdapter的使用</title>6.</head>7.<bodyMS_POSITIONING="GridLayout">8.<h3>使用數(shù)據(jù)適配器</h3>9. <hr/>10. <formid="Form1"method="post"runat="server">11. <asp:GridViewid="DataGrid1"runat="server"Width="816px"Height="152px"></asp:GridView>12. </form>13.</body>14.</html>五、填充數(shù)據(jù)集1、使用DataAdapter示例:

后臺代碼:1. protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();6.SqlCommand

myCommand=newSqlCommand("select*fromProduct",myConnection);7.SqlDataAdapterAdapter=newSqlDataAdapter();8.Adapter.SelectCommand=myCommand;9.DataSet

myDs=newDataSet();10.Adapter.Fill(myDs);11.GridView1.DataSource=myDs.Tables[0].DefaultView;12.GridView1.DataBind();13.myConnection.Close();14.}

五、填充數(shù)據(jù)集1、使用DataAdapter示例:

運(yùn)行效果五、填充數(shù)據(jù)集2、使用DataTable,DataColumn,DataRowDataSet由一組DataTable對象組成,它具備存儲多個表數(shù)據(jù)以及表間關(guān)系的能力。這些表就存儲在DataTable對象中,而表間的關(guān)系則用DataRelation對象表示。DataTable對象中包含了DataRow和DataColumn對象,分別存放表中行和列的數(shù)據(jù)信息。Tables屬性可以獲取包含在DataSet中的表的集合。DataTable的Rows屬性表示數(shù)據(jù)表中行的集合,DataTable的Columns屬性表示數(shù)據(jù)表中列的集合。

五、填充數(shù)據(jù)集2、使用DataTable,DataColumn,DataRow示例:1.protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();

6.SqlCommand

myCommand=newSqlCommand("select*fromProduct",myConnection);7.SqlDataAdapterAdapter=newSqlDataAdapter();8.Adapter.SelectCommand=myCommand;9.DataSet

myDs=newDataSet();10.Adapter.Fill(myDs);11.Response.Write("<h3>使用DataTable、DataColumn和DataRow</h3><hr>");12.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");13.DataTable

myTable=myDs.Tables[0];14.Response.Write("<tr

bgcolor=#DAB4B4>");15.foreach(DataColumn

myColumninmyTable.Columns)16.{17.Response.Write("<td>"+myColumn.ColumnName+"</td>");18.}19.Response.Write("</tr>");20.foreach(DataRow

myRowinmyTable.Rows)21.{22.Response.Write("<tr>");23.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論