您的位置:首页 > 数据库

ASP.NET(VB.NET)学习笔记--第六章.访问数据库(2/3)

2010-07-19 18:54 477 查看
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>
五.数据显示
公共模块: _myconnection.inc

<%@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控件查询数据
<!--#include file="_myconnection.inc "-->
<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: