2.[基于DataAdapter对象,]用DataSet对象访问数据库
I.DataAdapter对象
1). 语法:
法一:Dim myDataAdapter As New OleDbDataAdapter()
法二:Dim myDataAdapter As New OleDbDataAdapter(OleDbCommand对象)
法三:Dim myDataAdapter As New OleDbDataAdapter(SQL命令串, OleDbCommand对象)
法四:Dim myDataAdapter As New OleDbDataAdapter(SQL命令串,连接字符串)
2). DataAdapter对象的常用属性
属性
|
说明
|
ContinueUpdateOnError
|
用于获取或设置当执行Update()方法更新数据源发生错误时是否继续,默认为False
|
DeleteCommand
|
删除数据源中数据行的SQL命令。该值为Command对象。例如:cmd.Delete Command=New OleDbcommand(“Delete from students where id=’100’”,conn)
|
InsertCommand
|
向数据源中插入数据行的SQL命令。该值为Command对象
|
SelectCommand
|
查询数据源的SQL命令。该值为Command对象
|
UpdateCommand
|
更新数据源中数据行的SQL命令。该值为Command对象
|
3). DataAdapter对象的常用方法
方法
|
说明
|
Fill(dataset,srcTable)
|
将数据集的SelectCommand属性指定的SQL命令执行后所选取的数据行置入参数dataset指定的DataSet对象
|
Update(dataset,srcTable)
|
调用InsertCommand,UpdateCommand或DeleteCommand属性指定的SQL命令,将DataSet对象更新到相应的数据源。参数dataset指定要更新到数据源的DataSet对象,参数srcTable为数据表对应的来源数据表名。该方法的返回值受影响的行数
|
4). DataAdapter对象的事件
事件
|
说明
|
FillError
|
调用DataAdapter的Fill()方法时,若发生错误则触发该事件
|
RowUpdated
|
当调用Update()方法并执行完SQL命令时会触发该事件
|
RowUpdating
|
当调用Update()方法,在开始执行SQL命令时会触发该事件
|
(a).FillError事件参数为FillErrorEventArgs,该参数有以下几种:
Continue:指定发生错误时是否继续将数据置入DataSet对象
DataTable:发生错误时正在置入数据的数据表名
Errors:正在处理的错误
Values:发生错误时,正在更新的数据行
(b).RowUpdated事件参数对OLE DB数据库为OleDbRowUpdatedEventArgs,对SQL Server数据库为SqlRowUpdatedEventArgs;RowUpdating事件的参数对OLE DB数据库为OleDbRowUpdatingEventArgs,对SQL Server数据库为SqlRowUpdatingEventArgs。它们都有以下常用取值:
Command:调用Update()方法时执行的Command对象
Errors:执行SQL命令时,.NET数据提供程序所产生的错误
RecordsAffected:被Delete、Insert或Update等命令影响的行数
Row:Update()方法所发送的数据行
StatementType:Command对象执行的SQL命令类型,值可能为Select、Insert、Delete或Update
Status:更新状态,值可能为Continue(继续处理),ErrorsOccurred(发生错误),SkipAllRemainingRows(不更新当前和剩余行),SkipCurrentRow(不更新当前行)
II. DataSet对象
1). DataSet对象的创建
法一:Dim myDataSet As New DataSet()
法二:Dim myDataSet As New DataSet(数据集名)
法三:Dim myDataSet As new DataSet()
myDataSet=CreateDataSet("select * from message","#jcnz34032118211125034.mdb","message")
2). DataSet对象的结构
3). DataSet对象的常用属性
属性
|
说明
|
CaseSensitive
|
指定在DataTable对象中比较字符串时是否区分字母的大小写,默认为False
|
DataSetName
|
DaaSet对象的名称
|
EnforceConstraints
|
指定执行数据更新操作时是否遵循约束,默认为False
|
HasError
|
指示DataSet对象内的数据表是否存在错误行
|
Tables
|
数据集的数据表集合(DataTableCollection)。DataSet对象的所有DataTable对象都属于DataTableCollection
|
4). DataSet对象的常用方法
方法
|
说明
|
Clear()
|
清除DataSet对象的数据,删除所有DataTable对象
|
Copy()
|
复制DataSet对象的结构和数据,返回值是与本DataSet对象具有相同样结构和数据的DataSet对象
|
III. DataTable对象
(1). DataTableCollection(
数据表)集合
(i).
属性
属性
|
说明
|
Count
|
DataSet对象所包含的DataTable个数
|
Item({index,name})
|
获取DataTableCollnection中下标为index或名称为name的数据表
如:DS.Tables.Item(0)表示数据集对象DS中的第一个数据表,==DS.Tables(0)
DS.Tables.Item(“stu”)表示数据集对象DS中名称为”stu”的数据表,==DS.Tables(“stu”)
|
(ii).方法
方法
|
说明
|
Add({table,name})
|
向DataTableCollection中添加数据表
|
Clear()
|
清除DataTableCollection中的所有数据表
|
CanRemove(table)
|
判断参数table指定的数据表能否从DataTableCollnection中删除
|
Contains(name)
|
判断名为name的数据表是否被包含在DataTableCollnection中
|
IndexOf({table,name})
|
获取数据表的序号
|
Remove({table,name})
|
删除指定的数据表
|
RemoveAt(index)
|
删除下标为index的数据表
|
(2). DataTable对象
(i).
创建方法
法一:
Dim objAdpt As New OleDbDataAdapter()
Dim DS As New DataSet()
objAdpt.Fill(DS,myDataTable)
法二:
Dim myDataTable As New DataTable()
myDataTable.TableName=”mydatatable”
(ii).属性
属性
|
说明
|
Columns
|
数据表的所有字段,即DataColumnCollection集合,
|
DataSet
|
DataTable对象所属的DataSet对象
|
DefaultView
|
与数据表相关的DataView对象。DataView对象可用来显示DataTable对象的部分数据。可通过对数据表选择、排序等操作获得DataView(相当于数据库中的视图)
|
PrimaryKey
|
数据表的主键
|
Rows
|
数据表的所有行,即DataRowCollection集合
|
Tablename
|
数据表名
|
(iii).方法
方法
|
说明
|
Copy()
|
复制DataTable对象的结构和数据,返回与源DataTable对象具有同样结构和数据的DataTable对象
|
NewRow()
|
创建一个与当前数据表有相同字段结构的数据行
|
GetErrors()
|
获取包含错误的DataRow对象数组
|
(ix).事件
事件
|
说明
|
ColumnChanged
|
当数据行中某字段值发生变化时将触发该事件。该事件参数为DataColumnChangeEventArgs,可以取的值为Column(值被改变的字段)或Row(字段值被改变的数据行)
|
RowChanged
|
当数据行更新成功时将触发该事件。该事件参数为DataRowChangeEventArgs,可以取的值为Action(对数据行进行的更新操作名,包括:Add-将行加入数据表;Change-修改数据行内容;Commit-数据行的修改已提交;Delete-数据行已被删除;RollBack-数据行的更改被取消)和Row(发生更新操作的数据行)
|
RowDeleted
|
数据行被成功删除后将触发该事件。该事件参数为DataRowDeleteEventArgs,可以取的值与RowChanged事件的DataRowChangeEventArgs参数取值相同
|
(3).数据列集合(DataColumnCollection)对象
(i).DataColumnCollection属性
属性
|
说明
|
Count
|
数据表所包含的字段数
|
Item({index,name})
|
获取下标为index或名称为name的字段。如:DS.Tables(0).Columns.Item(0)表示数据表DS.Tables(0)中下标为0的字段,等价于DS.Tables(0).Coumns(0);
而DS.Tables(0).Columns.Item(“stu”)表示数据表DS.Tables(0)中字段名为stu的字段,等价于DS.Tables(0).Coumns(“stu”)
|
(ii).DataColumnCollection方法
与DataTableCollection类似
(4). 列(DataColumn)对象
(i).DataColumn对象的创建方法
Dim myDataColumn As New DataColumn()
Dim myDataColumn As New DataColumn(“字段名”)
Dim myDataColumn As New DataColumn(“字段名”,数据类型)
(ii).DataColumn对象的常用属性
属性
|
说明
|
AllowDBNull
|
设置该字段可否为空值,默认值为True
|
Caption
|
字段标题。若未指定,就是字段名。该属性学与DataGrid配合使用
|
ColumnName
|
字段名
|
DataType
|
字段的数据类型
|
DefaultValue
|
指定新增数据行时,字段的默认值
|
ReadOnly
|
指定新增数据行时,字段的值是否可修改。默认值为False
|
Table
|
包含该字段的DataTable对象
|
(iii).字段类型
a).语法格式:DataColumn 对象名.DataType=System.Type.GetType(“数据类型”)
b).类型取值:
System.Boolem:布尔型
System.Char:字符型
System.DateTime:日期型
System.Decimal:数值型
System.Double:双精度型
System.Int16:短整型
System.Int32:整数型
System.Int64:长整型
System.Single:单精度型
System.String:字符串型
(5).数据行集合(DataRowCollection)对象
DataRowCollection的属性和方法与DataColumnCollection对象类似
(6). 行(DataRow)对象
(i). DataRow对象的创建方法
Dim myDataRow As DataRow()
Dim myDataRow As DataRow()=DataTable对象名.NewRow()
(ii). DataRow对象的常用属性
属性
|
说明
|
Item({index,columnName})
|
指定字段的值
|
Table
|
包含该数据行的DataTable对象
|
(iii). DataRow对象的常用方法
方法
|
说明
|
AcceptChanges()
|
将所有变动过的数据行更新DataRowCollection
|
Delete()
|
删除数据行
|
IsNull({colName,index,Column对象名})
|
判断指定列或Column对象是否为空值
|
(7)例1.DataTable(表)、DataColumn(列)、DataRow(行)、TableCell(格)对象的创建与使用
Dim MyTable as New DataTable()
Dim MyColumn1,MyColumn2,MyColumn3 as New DataColumn()
MyTable.Columns.Add(MyColumn1)
MyTable.Columns.Add(MyColumn2)
MyTable.Columns.Add(MyColumn3)
IV.例
例1:DataTable绑定DataGrid对象
DataTable s=new DataTable();
s.Columns.Add(new DataColumn("
课程",typeof(string)));
s.Columns.Add(new DataColumn("
分数",typeof(int)));
DataRow d1=s.NewRow();
d1[0]="
数学";
d1[1]=80;
s.Rows.Add(d1);
DataRow d2=s.NewRow();
d2[0]="
语文";
d2[1]=40;
s.Rows.Add(d2);
DataGrid1.DataSource=s;
DataGrid1.DataBind();
例2:DataSet对象、DataAdapter和DataTable对象查询数据
<%@Import namespace="System.Data"%>
<%@Import namespace="System.Data.OleDb"%>
<script language="vb" runat="server">
sub Page_Load(Sender as Object,e As EventArgs)
if not ispostback then
dim conn as new oledbconnection()
dim cmd as new oledbcommand()
dim ds as new dataset()
dim i,j as integer
conn.connectionstring="provider=microsoft.jet.oledb.4.0;data source="+server.mappath("cbw.mdb")
conn.open()
cmd.connection=conn
cmd.commandtext="select * from message"
dim objadpt as new oledbdataadapter(cmd)
objadpt.fill(ds,"message") ‘message是添加到ds中的表名,而非数据库中的表名
response.write("留言表")
response.write("<table><tr>")
dim stutable as datatable=ds.tables("message")
for i=0 to stutable.columns.count-1 ‘显示表字段名
response.write("<td>")
response.write(stutable.columns(i).caption)
response.write("</td>")
next
response.write("<tr>")
for i=0 to stutable.rows.count-1 ‘显示每一条记录
response.write("<tr>")
for j=0 to stutable.columns.count-1 ‘显示每一条记录中的每一个字段
response.write("<td>")
response.write(stutable.rows(i).item(j))
response.write("</td>")
next
response.write("</tr>")
next
response.write("</table>")
conn.close()
end if
end sub
</script>
五.数据显示
<%@Import namespace="System.Data"%>
<%@Import namespace="System.Data.OleDb"%>
<script language="vb" runat="server">
Function CreateDataSet(strSQL As String,FileName As String,TableName As String) As DataSet
Dim conn As new OleDbConnection()
Dim cmd As new oledbcommand()
conn.connectionstring="provider=microsoft.jet.oledb.4.0;data source="+server.mappath("cbw.mdb")
conn.open()
cmd.connection=conn
cmd.commandtext=strsql
dim objadpt as new oledbdataadapter(cmd)
dim ds as new dataset()
objadpt.fill(ds,tablename)
createdataset=ds
conn.close()
End Function
</script>
1.Repeater控件
(1). RePeater控件可使用的模板
模板
|
说明
|
HeaderTemplate
|
设置数据标题的模板,该模板内的数据只出现一次
|
ItemTemplate
|
设置数据显示方式的模板,这是必需的模板
|
AlternatingItemTemplate
|
设置数据显示方式的模板,数据显示时将交替使用ItemTemplate和AlternatingItemTemplate模板
|
SeparatorTemplate
|
设置数据之间分隔的显示格式
|
FooterTemplate
|
设置数据页脚显示格式的模板,该模板内的数据只出现一次
|
(2). Repeater控件的主要属性
属性
|
说明
|
AlternatingItemTemplate
|
交替数据模板。若不定义该属性,表示数据均按ItemTemplate显示
|
DataSource
|
连接到Repeater控件的数据源
|
FooterTemplate
|
页脚模板
|
HeaderTemplate
|
标题模板
|
Items
|
RepeaterItemCollection集合,其成员是RepeaterItem对象,读入的数据均在该集合中,它的Count属性返回RepeaterItem对象个数。RepeaterItem对象的ItemIndex返回的是数据下标。
|
ItemTemplate
|
数据模板
|
SeparatorTemplate
|
分隔模板
|
(3). Repeater控件的事件
事件
|
说明
|
OnItemCommand
|
当用户单击Repeater控件中的Button、ImageButton或LinkButton等按钮控件时触发此事件
|
OnItemCreate
|
当在Repeater控件中创建数据时触发此事件。事件参数为RepeaterItemEventArgs,其属性Item用于获取与此事件相关的数据行,返回RepeaterItem对象
|
OnItemDataBound
|
当数据被连接到Repeater控件但数据尚未显示出来时将触发该事件。参数与OnItemCreate相同
|
(4).例:RePeater控件查询数据
<script language="vb" runat="server">
sub Page_Load(Sender as Object,e As EventArgs)
if not page.ispostback then
dim ds as new dataset()
ds=createdataset("select * from message","cbw.mdb","message")
sturept.datasource=ds.tables("message").defaultview
sturept.databind()
end if
end sub
</script>
<form runat="server">
<asp:repeater Runat="server" ID="sturept">
<headertemplate>
----------留言表----------<br>
</headertemplate>
<ItemTemplate>
ID:<%#Container.dataitem("id")%><br>
NAME:<%#Container.dataitem("name")%><br>
TEL:<%#Container.dataitem("tel")%><br>
FAX:<%#Container.dataitem("fax")%><br>
</ItemTemplate>
<AlternatingItemTemplate>
<b>ID:<%#Container.dataitem("id")%><br></b>
<b>NAME:<%#Container.dataitem("name")%><br></b>
<b>TEL:<%#Container.dataitem("tel")%><br></b>
<b>FAX:<%#Container.dataitem("fax")%><br></b>
</AlternatingItemTemplate>
<SeparatorTemplate>
=======================<br>
</SeparatorTemplate>
<FooterTemplate>
<br>----------结束了----------
</FooterTemplate>
</asp:repeater>
</form>