版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章使用DataSet訪問(wèn)數(shù)據(jù)庫(kù)本章內(nèi)容:本章內(nèi)容:DataSetDataSet的基本構(gòu)成,訪問(wèn)和填充的基本構(gòu)成,訪問(wèn)和填充DataSetDataSet,修改,修改DataSetDataSet及數(shù)據(jù)更新。及數(shù)據(jù)更新。本章重點(diǎn):本章重點(diǎn):DataSetDataSet的基本構(gòu)成,常用子對(duì)象、屬性和方法,使用的基本構(gòu)成,常用子對(duì)象、屬性和方法,使用DataSetDataSet與與DataAdapterDataAdapter配合完成常規(guī)數(shù)據(jù)庫(kù)操作。配合完成常規(guī)數(shù)據(jù)庫(kù)操作。DataSetDataSet(數(shù)據(jù)集)對(duì)象是的核心構(gòu)建之一,它是數(shù)據(jù)(數(shù)據(jù)集)對(duì)象是的核心構(gòu)建之一,它是數(shù)據(jù)的內(nèi)存表示形式,提供了
2、獨(dú)立于數(shù)據(jù)源的一致關(guān)系編的內(nèi)存表示形式,提供了獨(dú)立于數(shù)據(jù)源的一致關(guān)系編程模型。程模型。DataSetDataSet表示整個(gè)數(shù)據(jù)集,包括表、約束與表與表之間的表示整個(gè)數(shù)據(jù)集,包括表、約束與表與表之間的關(guān)系。由于關(guān)系。由于DataSetDataSet獨(dú)立于數(shù)據(jù)源,故其中可以包含應(yīng)獨(dú)立于數(shù)據(jù)源,故其中可以包含應(yīng)用程序的本地?cái)?shù)據(jù),也可以包含來(lái)自多個(gè)數(shù)據(jù)源的數(shù)用程序的本地?cái)?shù)據(jù),也可以包含來(lái)自多個(gè)數(shù)據(jù)源的數(shù)據(jù)。據(jù)??梢园褦?shù)據(jù)集理解為內(nèi)存中的一個(gè)臨時(shí)數(shù)據(jù)庫(kù),它把應(yīng)用可以把數(shù)據(jù)集理解為內(nèi)存中的一個(gè)臨時(shí)數(shù)據(jù)庫(kù),它把應(yīng)用程序需要的數(shù)據(jù)臨時(shí)保存在內(nèi)存中。由于這些數(shù)據(jù)都緩存程序需要的數(shù)據(jù)臨時(shí)保存在內(nèi)存中。由于這些數(shù)據(jù)
3、都緩存在本地計(jì)算機(jī)中,就不需要與數(shù)據(jù)庫(kù)服務(wù)器一直保持連接。在本地計(jì)算機(jī)中,就不需要與數(shù)據(jù)庫(kù)服務(wù)器一直保持連接。當(dāng)應(yīng)用程序需要數(shù)據(jù)時(shí),就直接從內(nèi)存中的數(shù)據(jù)集中讀當(dāng)應(yīng)用程序需要數(shù)據(jù)時(shí),就直接從內(nèi)存中的數(shù)據(jù)集中讀取數(shù)據(jù);也可以修改數(shù)據(jù)集中的數(shù)據(jù),然后把數(shù)據(jù)集中取數(shù)據(jù);也可以修改數(shù)據(jù)集中的數(shù)據(jù),然后把數(shù)據(jù)集中修改的數(shù)據(jù)寫回?cái)?shù)據(jù)庫(kù)。修改的數(shù)據(jù)寫回?cái)?shù)據(jù)庫(kù)。8.1.1 DataSet8.1.1 DataSet、DataAdapterDataAdapter和數(shù)據(jù)源之間的關(guān)系和數(shù)據(jù)源之間的關(guān)系l數(shù)據(jù)集不直接與數(shù)據(jù)庫(kù)聯(lián)系,數(shù)據(jù)集與數(shù)據(jù)庫(kù)之間的聯(lián)系是通過(guò).NET數(shù)據(jù)提供程序來(lái)實(shí)現(xiàn)的,因此數(shù)據(jù)集是獨(dú)立于任何數(shù)據(jù)庫(kù)的。
4、lDataSet是實(shí)現(xiàn)斷開式連接的核心,通過(guò)DataAdapter從數(shù)據(jù)源獲得數(shù)據(jù)后就斷開了與數(shù)據(jù)庫(kù)之間的連接,此后應(yīng)用程序所有對(duì)數(shù)據(jù)源的操作,均轉(zhuǎn)向到DataSet。l當(dāng)所有這些操作完成后,可以通過(guò)DataAdapter提供的數(shù)據(jù)源更新方法將修改后的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。8.1.2 DataSet8.1.2 DataSet的組成結(jié)構(gòu)和工作過(guò)程的組成結(jié)構(gòu)和工作過(guò)程1. DataSet1. DataSet的組成結(jié)構(gòu)的組成結(jié)構(gòu)l數(shù)據(jù)集與數(shù)據(jù)庫(kù)的結(jié)構(gòu)相似,數(shù)據(jù)集中也包含多個(gè)數(shù)據(jù)表。lDataSet主要由數(shù)據(jù)表集合、數(shù)據(jù)關(guān)系集合和ExtendedProperties8.1.2 DataSet8.1.2 D
5、ataSet的組成結(jié)構(gòu)和工作過(guò)程的組成結(jié)構(gòu)和工作過(guò)程1. DataSet1. DataSet的基本工作過(guò)程的基本工作過(guò)程首先,完成與數(shù)據(jù)庫(kù)的連接,首先,完成與數(shù)據(jù)庫(kù)的連接,DataSetDataSet在存放網(wǎng)站的服務(wù)器中為每一個(gè)用戶開在存放網(wǎng)站的服務(wù)器中為每一個(gè)用戶開辟一塊內(nèi)存,通過(guò)辟一塊內(nèi)存,通過(guò)DataAdapterDataAdapter,將得到的數(shù)據(jù)填充到,將得到的數(shù)據(jù)填充到DataSetDataSet中。然后,中。然后,把把DataSetDataSet中的數(shù)據(jù)發(fā)送給客戶端。網(wǎng)站服務(wù)器中的中的數(shù)據(jù)發(fā)送給客戶端。網(wǎng)站服務(wù)器中的DataSetDataSet使用完成以使用完成以后,將釋放后,將
6、釋放DataSetDataSet所占用的內(nèi)存。所占用的內(nèi)存??蛻舳俗x入數(shù)據(jù)后,在內(nèi)存中保存一份客戶端讀入數(shù)據(jù)后,在內(nèi)存中保存一份DataSetDataSet的副本,隨后斷開與數(shù)據(jù)的副本,隨后斷開與數(shù)據(jù)庫(kù)的連接??蛻舳藨?yīng)用程序所有針對(duì)數(shù)據(jù)庫(kù)的操作都是指向本地庫(kù)的連接??蛻舳藨?yīng)用程序所有針對(duì)數(shù)據(jù)庫(kù)的操作都是指向本地DataSetDataSet的。待數(shù)據(jù)庫(kù)操作完畢后,可通過(guò)的。待數(shù)據(jù)庫(kù)操作完畢后,可通過(guò)DataSetDataSet、DataAdapterDataAdapter提供提供的方法統(tǒng)一把更新后的的方法統(tǒng)一把更新后的DataSetDataSet發(fā)送到服務(wù)器中,服務(wù)器接收發(fā)送到服務(wù)器中,服務(wù)器接
7、收DataSetDataSet并修并修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。8.1.3 DataSet8.1.3 DataSet中的常用子對(duì)象中的常用子對(duì)象8.1.4 DataSet8.1.4 DataSet對(duì)象常用屬性和方法對(duì)象常用屬性和方法1. DataSet1. DataSet對(duì)象的常用屬性對(duì)象的常用屬性2. DataSet2. DataSet對(duì)象的常用方法對(duì)象的常用方法8.1.5 8.1.5 構(gòu)建構(gòu)建DataSetDataSet的方法的方法1. 1. 通過(guò)通過(guò)DataAdapterDataAdapter的的FillFill三方法三方法2. 2. 通過(guò)手工編程方式構(gòu)建通過(guò)手工編程方式構(gòu)建D
8、ataSetDataSet自定義自定義DataTableDataTable、DataColumnDataColumn、DataRowDataRow及及DataRelationDataRelation、ConstraintConstraint,然后構(gòu)建,然后構(gòu)建DataSetDataSet,最后把,最后把DataTableDataTable添加到添加到DataSetDataSet中。中。(1 1)DataTableDataTableDataTableDataTable是內(nèi)存中的一個(gè)關(guān)系數(shù)據(jù)表,可以作為是內(nèi)存中的一個(gè)關(guān)系數(shù)據(jù)表,可以作為DataSetDataSet中的一個(gè)中的一個(gè)成員使用,也可以獨(dú)
9、立創(chuàng)建使用。成員使用,也可以獨(dú)立創(chuàng)建使用。要把要把DataTableDataTable作為作為DataSetDataSet中的一個(gè)成員使用,可按以下步驟中的一個(gè)成員使用,可按以下步驟操作。操作。 創(chuàng)建一個(gè)空的數(shù)據(jù)集:創(chuàng)建一個(gè)空的數(shù)據(jù)集:DataSet ds = new DataSetDataSet ds = new DataSet三三; ; 創(chuàng)建一個(gè)創(chuàng)建一個(gè)DataTableDataTable對(duì)象:對(duì)象:DataTable dt = new DataTable(DataTable dt = new DataTable(表名表名););在創(chuàng)建在創(chuàng)建DataTableDataTable時(shí),可以指定
10、時(shí),可以指定DataTableDataTable的表名。如果沒有指定的表名。如果沒有指定表名,則自動(dòng)創(chuàng)建后綴從表名,則自動(dòng)創(chuàng)建后綴從0 0開始遞增的默認(rèn)表名開始遞增的默認(rèn)表名Table0Table0、Table1Table1、Table2Table2等。等。 把表添加到把表添加到DataSetDataSet中:中:ds.Tables.Add(ds.Tables.Add(表對(duì)象名表對(duì)象名); );ds.Tables.Add(ds.Tables.Add(表名表名);); 如果添加的表名在如果添加的表名在DataSetDataSet中已經(jīng)存在,則會(huì)引發(fā)異常。中已經(jīng)存在,則會(huì)引發(fā)異常。 上面創(chuàng)建的表沒
11、有表結(jié)構(gòu),要定義表結(jié)構(gòu),必須創(chuàng)建上面創(chuàng)建的表沒有表結(jié)構(gòu),要定義表結(jié)構(gòu),必須創(chuàng)建DataColumnDataColumn對(duì)象,并把數(shù)對(duì)象,并把數(shù)據(jù)列添加到表的據(jù)列添加到表的ColumnsColumns集合中。在為表定義結(jié)構(gòu)后,通過(guò)集合中。在為表定義結(jié)構(gòu)后,通過(guò)DataRowDataRow對(duì)象把數(shù)據(jù)行對(duì)象把數(shù)據(jù)行添加到表的添加到表的RowsRows集合中。集合中。(2 2)DataColumnDataColumnDataTableDataTable的結(jié)構(gòu)是通過(guò)向的結(jié)構(gòu)是通過(guò)向DataTableDataTable中添加一個(gè)或多個(gè)中添加一個(gè)或多個(gè)DataColumnDataColumn對(duì)象來(lái)實(shí)現(xiàn)的。對(duì)
12、象來(lái)實(shí)現(xiàn)的。DataColumnDataColumn對(duì)象有一些屬性用于對(duì)象有一些屬性用于對(duì)輸入數(shù)據(jù)的限制,包括數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度、默認(rèn)值等,常用屬性對(duì)輸入數(shù)據(jù)的限制,包括數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度、默認(rèn)值等,常用屬性見表見表8-48-4。 定義定義DataColumnDataColumn有兩種方法。有兩種方法。第一種方法:先創(chuàng)建空的第一種方法:先創(chuàng)建空的DataColumnDataColumn對(duì)象,然后設(shè)置該對(duì)象的屬性。對(duì)象,然后設(shè)置該對(duì)象的屬性。例如,下面是創(chuàng)建例如,下面是創(chuàng)建StudentNameStudentName(學(xué)生姓名)列的代碼:(學(xué)生姓名)列的代碼:DataClumn dcStuden
13、tName=new DataColumnDataClumn dcStudentName=new DataColumn三三; ; /創(chuàng)建創(chuàng)建StudentNameStudentName列對(duì)象列對(duì)象dcStudentName.ColumnName=StudentName;dcStudentName.ColumnName=StudentName; / /定義列名為定義列名為StudentNameStudentNamedcStudentName.DataType=System.Type.GetType(System.StrindcStudentName.DataType=System.Type.Get
14、Type(System.String); /g); /定義類型為定義類型為StringStringdcStudentName.MaxLength=20; dcStudentName.MaxLength=20; /定義列的最大字符數(shù)為定義列的最大字符數(shù)為2020個(gè)字符個(gè)字符第二種方法:在創(chuàng)建第二種方法:在創(chuàng)建DataColumnDataColumn對(duì)象時(shí)提供列名和對(duì)象時(shí)提供列名和列的數(shù)據(jù)類型,然后再設(shè)置該對(duì)象的屬性。列的數(shù)據(jù)類型,然后再設(shè)置該對(duì)象的屬性。下面也是創(chuàng)建下面也是創(chuàng)建StudentNameStudentName列的代碼:列的代碼:DataColumn dcStudentName=new
15、 DataColumn dcStudentName=new DataColumn(StudentName, typeof(string);DataColumn(StudentName, typeof(string);dcStudentName. MaxLength=20;dcStudentName. MaxLength=20; 在表中添加列。在表中添加列。dt.Columns.Add(dt.Columns.Add(列對(duì)象名列對(duì)象名); );ds.Tablesds.Tables表名表名.Column.Add(.Column.Add(列名列名, , 列類型列類型); );(3 3)DataRowD
16、ataRow在在DataTableDataTable中,用中,用DataColumnDataColumn定義好表結(jié)構(gòu)后,可以定義好表結(jié)構(gòu)后,可以通過(guò)通過(guò)DataRowDataRow把記錄數(shù)據(jù)添加到把記錄數(shù)據(jù)添加到DataTableDataTable中。中。例如,下面代碼把例如,下面代碼把“黃穎黃穎”添加到用添加到用DataColumnDataColumn定定義好的義好的DataTableDataTable中。中。DataRow drStudentInfo=dt.NewRowDataRow drStudentInfo=dt.NewRow三三drStudentInfodcStudentName=d
17、rStudentInfodcStudentName=黃穎黃穎; ;8.2.1 8.2.1 創(chuàng)建創(chuàng)建DataSetDataSet創(chuàng)建數(shù)據(jù)集對(duì)象的語(yǔ)法格式如下:創(chuàng)建數(shù)據(jù)集對(duì)象的語(yǔ)法格式如下:DataSet DataSet 數(shù)據(jù)集對(duì)象名數(shù)據(jù)集對(duì)象名 = new DataSet = new DataSet三三; ;或或DataSet DataSet 數(shù)據(jù)集對(duì)象名數(shù)據(jù)集對(duì)象名 = new DataSet( = new DataSet(表名表名););其中,前一個(gè)語(yǔ)法格式表示要先創(chuàng)建一個(gè)空數(shù)據(jù)集,以后再將其中,前一個(gè)語(yǔ)法格式表示要先創(chuàng)建一個(gè)空數(shù)據(jù)集,以后再將已經(jīng)建立的數(shù)據(jù)表(已經(jīng)建立的數(shù)據(jù)表(DataTa
18、bleDataTable)添加進(jìn)來(lái);后一個(gè)語(yǔ)法格式)添加進(jìn)來(lái);后一個(gè)語(yǔ)法格式是先建立數(shù)據(jù)表,然后建立包含該數(shù)據(jù)表的數(shù)據(jù)集。是先建立數(shù)據(jù)表,然后建立包含該數(shù)據(jù)表的數(shù)據(jù)集。8.2.2 8.2.2 填充填充DataSetDataSet所謂所謂“填充填充”,是指將,是指將DataAdapterDataAdapter對(duì)象通過(guò)執(zhí)行對(duì)象通過(guò)執(zhí)行SQLSQL語(yǔ)句從數(shù)據(jù)源得到的返回結(jié)語(yǔ)句從數(shù)據(jù)源得到的返回結(jié)果。果。使用使用DataAdapterDataAdapter對(duì)象的對(duì)象的FillFill方法傳遞給方法傳遞給DataSetDataSet對(duì)象。對(duì)象。其常用語(yǔ)法格式如下:其常用語(yǔ)法格式如下:數(shù)據(jù)適配器對(duì)象名數(shù)據(jù)
19、適配器對(duì)象名.Fill(.Fill(數(shù)據(jù)集對(duì)象名數(shù)據(jù)集對(duì)象名); );或或數(shù)據(jù)適配器對(duì)象名數(shù)據(jù)適配器對(duì)象名.Fill(.Fill(數(shù)據(jù)集對(duì)象名數(shù)據(jù)集對(duì)象名, , 表名表名););l“數(shù)據(jù)庫(kù)適配器對(duì)象名”為DataSetAdapter對(duì)象實(shí)例;“數(shù)據(jù)集對(duì)象名”為DataSet對(duì)象;“表名”為用于數(shù)據(jù)表映射的臨時(shí)表名稱。在第一種格式中僅實(shí)現(xiàn)了DataSet對(duì)象的填充,而第二種格式則實(shí)現(xiàn)了填充DataSet對(duì)象和指定一個(gè)可以引用的別名兩項(xiàng)任務(wù)。填充填充DataSetDataSet的一般方法和步驟如下。的一般方法和步驟如下。 使用使用ConnectionConnection對(duì)象建立與數(shù)據(jù)庫(kù)的連接:對(duì)象
20、建立與數(shù)據(jù)庫(kù)的連接:SqlConnection conn = new SqlConnectionSqlConnection conn = new SqlConnection三三; ; /創(chuàng)建創(chuàng)建SQL ServerSQL Server連接對(duì)象,連接對(duì)象,這里不需要建立這里不需要建立CommandCommand對(duì)象。對(duì)象。 創(chuàng)建創(chuàng)建DataAdapterDataAdapter對(duì)象:對(duì)象:SqlDataAdapter da = new SqlDataAdapterSqlDataAdapter da = new SqlDataAdapter三三; /; /創(chuàng)建空的創(chuàng)建空的DataAdapterDat
21、aAdapter對(duì)象對(duì)象 創(chuàng)建從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)用的創(chuàng)建從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)用的Select SQLSelect SQL語(yǔ)句:語(yǔ)句:string SelectSql = select string SelectSql = select * * from StudentInfo; from StudentInfo; 設(shè)置設(shè)置DataAdapterDataAdapter對(duì)象的對(duì)象的SelectCommandSelectCommand屬性,使用屬性,使用connconn指定連接,執(zhí)行指定連接,執(zhí)行SelectSqlSelectSql指定的指定的SQLSQL語(yǔ)句,從數(shù)據(jù)庫(kù)中取出需要的數(shù)據(jù)。代碼如下:語(yǔ)句,從
22、數(shù)據(jù)庫(kù)中取出需要的數(shù)據(jù)。代碼如下:da.SelectCommand = new SqlCommand(SelectSql, conn);da.SelectCommand = new SqlCommand(SelectSql, conn); 創(chuàng)建一個(gè)空創(chuàng)建一個(gè)空DataSetDataSet對(duì)象:對(duì)象:DataSet ds = new DataSetDataSet ds = new DataSet三三; ; 使用使用DataAdapterDataAdapter對(duì)象的對(duì)象的FillFill方法填充方法填充DataSetDataSet:da.Fill(ds); da.Fill(ds); / /將將Da
23、taAdapterDataAdapter執(zhí)行執(zhí)行SQLSQL語(yǔ)句返回的結(jié)果填充到語(yǔ)句返回的結(jié)果填充到DataSetDataSet對(duì)象對(duì)象 為為GridViewGridView控件設(shè)置數(shù)據(jù)源,并綁定,以便在控件設(shè)置數(shù)據(jù)源,并綁定,以便在GridViewGridView控件中顯示控件中顯示DataSetDataSet中的數(shù)據(jù)。中的數(shù)據(jù)?!纠纠?-18-1】使用】使用DataSetDataSet瀏覽數(shù)據(jù)庫(kù)。程序運(yùn)行后能將瀏覽數(shù)據(jù)庫(kù)。程序運(yùn)行后能將SQL ServerSQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)StudentDBStudentDB的的StudentInfoStudentInfo表中所有記錄顯示到
24、表中所有記錄顯示到GridViewGridView控件中??丶小?protected void Page_Load(object sender, EventArgs e)protected void Page_Load(object sender, EventArgs e) SqlConnection conn = new SqlConnection SqlConnection conn = new SqlConnection三三; /; /創(chuàng)建創(chuàng)建SQL ServerSQL Server連接對(duì)象連接對(duì)象 / /為連接對(duì)象的連接字符串屬性賦值為連接對(duì)象的連接字符串屬性賦值 / /其中其中“M
25、ICROSOF-63A313MSSQLSERVER202X”“MICROSOF-63A313MSSQLSERVER202X”為為SQL ServerSQL Server服務(wù)器計(jì)算機(jī)名稱服務(wù)器計(jì)算機(jī)名稱 / /使用時(shí)要更換為自己的計(jì)算機(jī)和數(shù)據(jù)庫(kù)服務(wù)器名稱。使用時(shí)要更換為自己的計(jì)算機(jī)和數(shù)據(jù)庫(kù)服務(wù)器名稱。 / /注意,連接字符串中的注意,連接字符串中的“”“”字符,在程序代碼中需要轉(zhuǎn)義,所以要寫為字符,在程序代碼中需要轉(zhuǎn)義,所以要寫為“”“” conn.ConnectionString=Data Source =.SQLEXPRESS conn.ConnectionString=Data Sourc
26、e =.SQLEXPRESSInitial Catalog=StudentDB; Integrated Security=True;Initial Catalog=StudentDB; Integrated Security=True; SqlDataAdapter da = new SqlDataAdapter SqlDataAdapter da = new SqlDataAdapter三三; /; /創(chuàng)建創(chuàng)建DataAdapterDataAdapter對(duì)象對(duì)象 string SelectSql = select string SelectSql = select * * from Stud
27、entInfo; / from StudentInfo; /定義從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)用的定義從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)用的Select SQLSelect SQL語(yǔ)句語(yǔ)句 da.SelectCommand = new SqlCommand(SelectSql, conn);/ da.SelectCommand = new SqlCommand(SelectSql, conn);/執(zhí)行執(zhí)行SelectSqlSelectSql指定的指定的Select SQLSelect SQL語(yǔ)句語(yǔ)句 DataSet ds = new DataSet DataSet ds = new DataSet三三; /; /創(chuàng)建一個(gè)空創(chuàng)
28、建一個(gè)空DataSetDataSet對(duì)象對(duì)象 da.Fill(ds); / da.Fill(ds); /將將DataAdapterDataAdapter執(zhí)行執(zhí)行SQLSQL語(yǔ)句返回的結(jié)果填充到語(yǔ)句返回的結(jié)果填充到DataSetDataSet對(duì)象中對(duì)象中 GridView1.DataSource = ds; / GridView1.DataSource = ds; /設(shè)置填充后的設(shè)置填充后的DataSetDataSet對(duì)象為對(duì)象為GridViewGridView控件的數(shù)據(jù)源控件的數(shù)據(jù)源 GridView1.DataBind GridView1.DataBind三三; ; 【例【例8-28-2】p
29、rotected void Page_Load(object sender, EventArgs e)protected void Page_Load(object sender, EventArgs e) SqlConnection conn = new SqlConnection SqlConnection conn = new SqlConnection三三; /; /創(chuàng)建創(chuàng)建SQL ServerSQL Server連接對(duì)象連接對(duì)象 / /符號(hào)的作用是忽略轉(zhuǎn)義字符,所以后面字符串中寫一個(gè)符號(hào)的作用是忽略轉(zhuǎn)義字符,所以后面字符串中寫一個(gè)“” “” conn.ConnectionString
30、=Data Source=MICROSOF-63A313MSSQLSERVER202X; conn.ConnectionString=Data Source=MICROSOF-63A313MSSQLSERVER202X;Initial Catalog=StudentDB; Integrated Security=True; Initial Catalog=StudentDB; Integrated Security=True; SqlDataAdapter da = new SqlDataAdapter SqlDataAdapter da = new SqlDataAdapter三三; /;
31、/創(chuàng)建創(chuàng)建DataAdapterDataAdapter對(duì)象對(duì)象 string SelectSql = select string SelectSql = select * * from StudentInfo where Sex = from StudentInfo where Sex = 女女; +; + select select * * from StudentInfo where Email like %163%; from StudentInfo where Email like %163%; / /定義從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)用的定義從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)用的Select SQLSelect S
32、QL語(yǔ)句,本例是兩條語(yǔ)句,本例是兩條SelectSelect語(yǔ)句語(yǔ)句 da.SelectCommand = new SqlCommand(SelectSql, conn); / da.SelectCommand = new SqlCommand(SelectSql, conn); /執(zhí)行執(zhí)行SQLSQL語(yǔ)句并保存到語(yǔ)句并保存到dada中中 DataSet ds = new DataSet DataSet ds = new DataSet三三; /; /創(chuàng)建一個(gè)空創(chuàng)建一個(gè)空DataSetDataSet對(duì)象對(duì)象 da.Fill(ds); / da.Fill(ds); /把把dada中的數(shù)據(jù)填充到中
33、的數(shù)據(jù)填充到dsds中,將生成兩個(gè)表中,將生成兩個(gè)表 GridView1.Caption = GridView1.Caption = 性別為性別為“ “女女” ”的所有記錄的所有記錄; GridView1.DataSource = ds.Tables0; / GridView1.DataSource = ds.Tables0; /使用第一個(gè)結(jié)果集為使用第一個(gè)結(jié)果集為GridView1GridView1的數(shù)據(jù)源的數(shù)據(jù)源 GridView1.DataBind GridView1.DataBind三三; /; /綁定數(shù)據(jù)源綁定數(shù)據(jù)源 GridView2.Caption = GridView2.Cap
34、tion = 電子郵箱地址中包含電子郵箱地址中包含“163”“163”的所有記錄的所有記錄; GridView2.DataSource = ds.Tables1; / GridView2.DataSource = ds.Tables1; /使用第二個(gè)結(jié)果集為使用第二個(gè)結(jié)果集為GridView2GridView2的數(shù)據(jù)源的數(shù)據(jù)源 GridView2.DataBind GridView2.DataBind三三; /; /綁定數(shù)據(jù)源綁定數(shù)據(jù)源 8.3.1 8.3.1 添加新記錄添加新記錄在用在用DataSetDataSet添加新記錄時(shí),需要自定義一個(gè)與要添加記錄的數(shù)據(jù)表完全相同的添加新記錄時(shí),需要自
35、定義一個(gè)與要添加記錄的數(shù)據(jù)表完全相同的DataTableDataTable,然后把然后把DataTableDataTable添加到添加到DataSetDataSet中。中。通過(guò)通過(guò)DataSetDataSet向數(shù)據(jù)表添加新記錄的一般方法和步驟如下。向數(shù)據(jù)表添加新記錄的一般方法和步驟如下。 使用Connection對(duì)象建立與數(shù)據(jù)庫(kù)的連接。 創(chuàng)建從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)用的Select SQL語(yǔ)句。 通過(guò)DataAdapter對(duì)象用Select SQL語(yǔ)句從數(shù)據(jù)庫(kù)中取出需要的數(shù)據(jù)。 使用SqlCommandBuilder對(duì)象為DataAdapter對(duì)象自動(dòng)生成更新命令。 創(chuàng)建DataSet對(duì)象。 使用Da
36、taAdapter對(duì)象的Fill三方法填充DataSet。 使用NewRow三方法在DataSet中填充的表對(duì)象中創(chuàng)建一個(gè)新行對(duì)象。 為新行中各字段賦值。 將新行對(duì)象添加到DataSet中填充的表對(duì)象中。 調(diào)用DataAdapter對(duì)象的Update三方法將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中?!纠纠?-38-3】使用】使用DataSetDataSet向數(shù)據(jù)庫(kù)中添加新記錄(行)。向數(shù)據(jù)庫(kù)中添加新記錄(行)。頁(yè)面裝入時(shí)在頁(yè)面裝入時(shí)在GridViewGridView控件中顯示當(dāng)前數(shù)據(jù)表中所有記錄,代碼如下:控件中顯示當(dāng)前數(shù)據(jù)表中所有記錄,代碼如下:protected void Page_Load(object s
37、ender, EventArgs e)protected void Page_Load(object sender, EventArgs e) SqlConnection conn = new SqlConnection SqlConnection conn = new SqlConnection三三; /; /創(chuàng)建創(chuàng)建SQL ServerSQL Server連接對(duì)象連接對(duì)象 conn.ConnectionString=Data Source= conn.ConnectionString=Data Source=服務(wù)器名服務(wù)器名;Initial Catalog=StudentDB; ;Init
38、ial Catalog=StudentDB; Integrated Security=True;Integrated Security=True; / /把把“ “服務(wù)器名服務(wù)器名” ”更改為自己的更改為自己的SQL ServerSQL Server服務(wù)器實(shí)例名服務(wù)器實(shí)例名 SqlDataAdapter da = new SqlDataAdapter SqlDataAdapter da = new SqlDataAdapter三三; /; /創(chuàng)建創(chuàng)建DataAdapterDataAdapter對(duì)象對(duì)象 string SelectSql = select string SelectSql = s
39、elect * * from StudentInfo; from StudentInfo; da.SelectCommand = new SqlCommand(SelectSql, conn); da.SelectCommand = new SqlCommand(SelectSql, conn); DataSet ds = new DataSet DataSet ds = new DataSet三三; /; /創(chuàng)建一個(gè)空創(chuàng)建一個(gè)空DataSetDataSet對(duì)象對(duì)象 da.Fill(ds,studentInfo); da.Fill(ds,studentInfo); GridView1.Data
40、Source = ds; GridView1.DataSource = ds; / /設(shè)置填充后的設(shè)置填充后的DataSetDataSet對(duì)象為對(duì)象為GridViewGridView控件的數(shù)據(jù)源控件的數(shù)據(jù)源 GridView1.DataBind GridView1.DataBind三三; ; 單擊單擊“添加記錄添加記錄”按鈕時(shí)執(zhí)行的事件代碼如下:按鈕時(shí)執(zhí)行的事件代碼如下:protected void AddRow_Click(object sender, EventArgs e)protected void AddRow_Click(object sender, EventArgs e) Sq
41、lConnection conn = new SqlConnection SqlConnection conn = new SqlConnection三三; /; /創(chuàng)建創(chuàng)建SQL ServerSQL Server連接對(duì)象連接對(duì)象 conn.ConnectionString=Data Source= conn.ConnectionString=Data Source=服務(wù)器名服務(wù)器名;Initial Catalog=StudentDB;Initial Catalog=StudentDB;Integrated Security=True; /Integrated Security=True; /
42、把把“服務(wù)器名服務(wù)器名”更改為自己的更改為自己的SQL ServerSQL Server服務(wù)器實(shí)例名服務(wù)器實(shí)例名 SqlDataAdapter da = new SqlDataAdapter SqlDataAdapter da = new SqlDataAdapter三三; /; /創(chuàng)建創(chuàng)建DataAdapterDataAdapter對(duì)象對(duì)象 string SelectSql = select string SelectSql = select * * from StudentInfo; from StudentInfo; da.SelectCommand = new SqlCommand(S
43、electSql, conn); da.SelectCommand = new SqlCommand(SelectSql, conn); / /自動(dòng)生成單表,用于將對(duì)自動(dòng)生成單表,用于將對(duì)DataSetDataSet所做的更改與關(guān)聯(lián)的所做的更改與關(guān)聯(lián)的SQL ServerSQL Server數(shù)據(jù)庫(kù)的更改相協(xié)調(diào)數(shù)據(jù)庫(kù)的更改相協(xié)調(diào) SqlCommandBuilder scb = new SqlCommandBuilder(da); / SqlCommandBuilder scb = new SqlCommandBuilder(da); /為為DataAdapterDataAdapter自動(dòng)生成更新
44、命令自動(dòng)生成更新命令 DataSet ds = new DataSet DataSet ds = new DataSet三三; /; /創(chuàng)建一個(gè)空創(chuàng)建一個(gè)空DataSetDataSet對(duì)象對(duì)象 da.Fill(ds); da.Fill(ds); DataRow StudentNewRow = ds.Tables0.NewRow DataRow StudentNewRow = ds.Tables0.NewRow三三;/;/在在DataSetDataSet第一個(gè)表中創(chuàng)建一個(gè)新行對(duì)象第一個(gè)表中創(chuàng)建一個(gè)新行對(duì)象 StudentNewRowStudentID = 202X02602028; / Stud
45、entNewRowStudentID = 202X02602028; /為新行的各字段賦值為新行的各字段賦值 StudentNewRowStudentName = StudentNewRowStudentName = 黃蓉黃蓉; StudentNewRowSex = ; StudentNewRowSex = 女女; ; StudentNewRowDateOfBirth = 202X-09-28 StudentNewRowDateOfBirth = 202X-09-28“; StudentNewRowSpecialty = ; StudentNewRowSpecialty = 網(wǎng)絡(luò)技術(shù)網(wǎng)絡(luò)技術(shù); ; ds.Tables0.Rows.Add(Stud
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年建筑工人勞動(dòng)合同樣本
- 2024年度互聯(lián)網(wǎng)金融服務(wù)平臺(tái)技術(shù)開發(fā)與運(yùn)營(yíng)合同
- 2024年工程文件保密與轉(zhuǎn)讓協(xié)議
- 2024醫(yī)療器械銷售及市場(chǎng)推廣合同
- 2024年公共交通乘車意外傷害保險(xiǎn)合同
- 2024年度居民搬家服務(wù)定制合同
- 2024年工程建設(shè)的擔(dān)保協(xié)議
- 2024年勞動(dòng)力外包合作協(xié)議
- 2024年度股權(quán)轉(zhuǎn)讓合同模板
- 2024人工智能技術(shù)研發(fā)合同-科技創(chuàng)新合作
- 《功能材料概論》課件
- 工程師職稱代評(píng)銷售話術(shù)
- POCT臨床應(yīng)用與質(zhì)量管理
- 私立民辦初中學(xué)校項(xiàng)目融資計(jì)劃書
- 膿毒性休克病人護(hù)理查房課件
- 《本量利分析》課件
- 2023光伏組件隱性缺陷檢測(cè)技術(shù)規(guī)范
- 2024年財(cái)務(wù)分析師就業(yè)前景及技能要求精
- 關(guān)于文明的課件
- 30題安全員崗位常見面試問(wèn)題含HR問(wèn)題考察點(diǎn)及參考回答
- 2024年會(huì)計(jì)專業(yè)大學(xué)生職業(yè)規(guī)劃計(jì)劃書
評(píng)論
0/150
提交評(píng)論