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对象的常用属性
3). DataAdapter对象的常用方法
4). DataAdapter对象的事件
(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对象的常用属性
4). DataSet对象的常用方法
III. DataTable对象
(1). DataTableCollection(数据表)集合
(i).属性
(ii).方法
(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).属性
(iii).方法
(ix).事件
(3).数据列集合(DataColumnCollection)对象
(i).DataColumnCollection属性
(ii).DataColumnCollection方法
与DataTableCollection类似
(4). 列(DataColumn)对象
(i).DataColumn对象的创建方法
Dim myDataColumn As New DataColumn()
Dim myDataColumn As New DataColumn(“字段名”)
Dim myDataColumn As New DataColumn(“字段名”,数据类型)
(ii).DataColumn对象的常用属性
(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对象的常用属性
(iii). DataRow对象的常用方法
(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控件可使用的模板
(2). Repeater控件的主要属性
(3). Repeater控件的事件
(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>
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对象 |
方法 | 说明 |
Fill(dataset,srcTable) | 将数据集的SelectCommand属性指定的SQL命令执行后所选取的数据行置入参数dataset指定的DataSet对象 |
Update(dataset,srcTable) | 调用InsertCommand,UpdateCommand或DeleteCommand属性指定的SQL命令,将DataSet对象更新到相应的数据源。参数dataset指定要更新到数据源的DataSet对象,参数srcTable为数据表对应的来源数据表名。该方法的返回值受影响的行数 |
事件 | 说明 |
FillError | 调用DataAdapter的Fill()方法时,若发生错误则触发该事件 |
RowUpdated | 当调用Update()方法并执行完SQL命令时会触发该事件 |
RowUpdating | 当调用Update()方法,在开始执行SQL命令时会触发该事件 |
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 |
方法 | 说明 |
Clear() | 清除DataSet对象的数据,删除所有DataTable对象 |
Copy() | 复制DataSet对象的结构和数据,返回值是与本DataSet对象具有相同样结构和数据的DataSet对象 |
(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”) |
方法 | 说明 |
Add({table,name}) | 向DataTableCollection中添加数据表 |
Clear() | 清除DataTableCollection中的所有数据表 |
CanRemove(table) | 判断参数table指定的数据表能否从DataTableCollnection中删除 |
Contains(name) | 判断名为name的数据表是否被包含在DataTableCollnection中 |
IndexOf({table,name}) | 获取数据表的序号 |
Remove({table,name}) | 删除指定的数据表 |
RemoveAt(index) | 删除下标为index的数据表 |
(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 | 数据表名 |
方法 | 说明 |
Copy() | 复制DataTable对象的结构和数据,返回与源DataTable对象具有同样结构和数据的DataTable对象 |
NewRow() | 创建一个与当前数据表有相同字段结构的数据行 |
GetErrors() | 获取包含错误的DataRow对象数组 |
事件 | 说明 |
ColumnChanged | 当数据行中某字段值发生变化时将触发该事件。该事件参数为DataColumnChangeEventArgs,可以取的值为Column(值被改变的字段)或Row(字段值被改变的数据行) |
RowChanged | 当数据行更新成功时将触发该事件。该事件参数为DataRowChangeEventArgs,可以取的值为Action(对数据行进行的更新操作名,包括:Add-将行加入数据表;Change-修改数据行内容;Commit-数据行的修改已提交;Delete-数据行已被删除;RollBack-数据行的更改被取消)和Row(发生更新操作的数据行) |
RowDeleted | 数据行被成功删除后将触发该事件。该事件参数为DataRowDeleteEventArgs,可以取的值与RowChanged事件的DataRowChangeEventArgs参数取值相同 |
(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”) |
与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对象 |
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对象 |
方法 | 说明 |
AcceptChanges() | 将所有变动过的数据行更新DataRowCollection |
Delete() | 删除数据行 |
IsNull({colName,index,Column对象名}) | 判断指定列或Column对象是否为空值 |
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 | 设置数据页脚显示格式的模板,该模板内的数据只出现一次 |
属性 | 说明 |
AlternatingItemTemplate | 交替数据模板。若不定义该属性,表示数据均按ItemTemplate显示 |
DataSource | 连接到Repeater控件的数据源 |
FooterTemplate | 页脚模板 |
HeaderTemplate | 标题模板 |
Items | RepeaterItemCollection集合,其成员是RepeaterItem对象,读入的数据均在该集合中,它的Count属性返回RepeaterItem对象个数。RepeaterItem对象的ItemIndex返回的是数据下标。 |
ItemTemplate | 数据模板 |
SeparatorTemplate | 分隔模板 |
事件 | 说明 |
OnItemCommand | 当用户单击Repeater控件中的Button、ImageButton或LinkButton等按钮控件时触发此事件 |
OnItemCreate | 当在Repeater控件中创建数据时触发此事件。事件参数为RepeaterItemEventArgs,其属性Item用于获取与此事件相关的数据行,返回RepeaterItem对象 |
OnItemDataBound | 当数据被连接到Repeater控件但数据尚未显示出来时将触发该事件。参数与OnItemCreate相同 |
<!--#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>
相关文章推荐
- ASP.NET(VB.NET)学习笔记--第六章.访问数据库(1/3)
- ASP.NET(VB.NET)学习笔记--第六章.访问数据库(3/3)
- ASP.NET之数据库访问
- ASP.net出现“访问IIS元数据库失败”解决方法是什么?
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层
- 在ASP.NET访问Excel文件 (VB.NET and C#)
- 请问一下asp.net程序中,数据库访问用什么方式比较好
- ASP.NET 调用存储过程访问数据库
- ASP.NET MVC EF 02 数据库访问层的设计
- 程序设计之三:OleDB数据库访问技术(VB.NET+Access)
- 配置ASP.NET平台时遇到的“访问IIS元数据库失败”
- (ASP.NET)修改和删除DataGrid行——数据库访问
- 《Programming ASP.NET》学习笔记(Web数据访问)
- 经典讲解VB.NET线程方法之访问数据库
- 抽象工厂模式:实现ASP.NET访问不同数据库
- 在ASP.NET访问Excel文件(VBandC#)
- 配置ASP.NET平台时遇到的“访问IIS元数据库失败”
- 关于部署完asp.net程序后不能访问页面也不能连接数据库的问题
- 通过ASP.net实现flash对数据库的访问