《ASP.NET程序设计实用技术教学课件王凤岭第7章节》由会员分享,可在线阅读,更多相关《ASP.NET程序设计实用技术教学课件王凤岭第7章节(53页珍藏版)》请在金锄头文库上搜索。
1、第7章 使用DataReader、Command对象和list-bound控件读取数据,7.1 处理和显示数据,通过ADO.NET访问数据库需要通过以下过程: 创建数据源(库)连接 从数据源读取、写入、修改数据 在Web页面上显示数据,7.1.1 Command对象,Command对象允许使用其属性和方法来执行要执行的任何SQL命令,并查看这些命令的执行情况,另外还可以结合Connection对象执行事务处理。,SqlCommand的属性 Connection CommandText CommandType Parameters Transaction UpdateRowSource,例程7.
2、1 Dim cmd As New SqlCommand cmd.Connection = conn cmd.CommandType = CommandType.Text cmd.CommandText = “SELECT * FROM tblStudents“,例程7.2 Dim cmd As New SqlCommand cmd.Connection = conn cmd.CommandType = CommandType.TableDirect cmd.CommandText = “tblStudents“,例程7.3 Dim cmd As New SqlCommand cmd.Conne
3、ction = conn cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = “GetAllStudentName“,表7.2:SqlCommand的方法 ExecuteNonQuery ExecuteReader ExecuteScalar ExecuteXmlReader(不在本书讨论范围) CreateParameter Cancel ResetCommandTimeout,(1) ExecuteNonQuery ExecuteNonQuery方法将SQLServer上执行指定的T-SQL,但是它只返回受T-SQ
4、L影响的行数。因此,它适合执行不返回结果集的T-SQL命令。,(2) ExecuteReader ExecuteReader方法用于返回包含由SQL Server执行的命令返回的行的DataReader对象。 DataReader对象是一种从SQL Server中检索单一结果集的高速、只读方法。,(3) ExecuteScalar ExecuteScalar方法用于运行返回单一行中的单列的查询,例如COUNT(*)之类的聚合函数。,(4) ExecuteXmlReader ExecuteXmlReader可以用于执行输出XML的T-SQL命令,如使用FOR XML选项的SEIECT语句。,7.
5、1.2 DataReader对象,DataReader对象的特征: 只能读取数据,不能添加、修改、删除数据。 只能在记录间向前移动。 在内存中存放数据。 连接模式下工作。,阅读表7.3、表7.4,了解SqlDataReader的属性和方法。,7.2 使用DataReader对象,使用DataReader的步骤: (1)打开数据库连接(Connection) (2)执行Command.ExecuteReader()获取一个DataReader。 (3)通过DataReader.Read()返回值判断是否有数据可读。 (4)逐条读取数据。 (5)数据读取完毕即关闭数据库连接。,7.2.1 使用Da
6、taReader对象检索数据, 建立数据库连接 Dim conn As New SqlConnection conn.ConnectionString = ConfigurationSettings.AppSettings(“DBConnStr”) 定义要执行的SQL语句 Dim cmd As New SqlCommand cmd.Connection = conn cmd.CommandType = CommandType.Text cmd.CommandText = “select * from tblStudent”, 定义DataReader Dim dr As SqlDataRead
7、er conn.Open() dr = cmd.ExecuteReader 通过DataReader读取数据 Do While dr.Read() Response.Write(dr(“Name”)&”) Loop 关闭DataReader和数据库连接 dr.Close() conn.close(),7.2.2 DataReader对象的常用方法,GetDataTypeName 获取数据表中某列(字段)的数据类型 例: Dim dr As SqlDataReader dr = cmd.ExecuteReader If dr.Read Then Response.Write(dr.GetData
8、TypeName(0) End If 同时请看教材例程7.12,GetValues/GetSqlValues 将某行记录的所有列(所有字段)的值填充到一个数组当中。 例如: Dim dr As SqlDataReader Dim myColums(dr.FieldCount-1) As Object If dr.Read Then dr.GetValues(myColums) End If 请同时参考教材例程7.13和7.14。,检索多个结果集 一次性将多个SQL语句发送到数据,随后将接收到多个结果集。 如: Dim conn As New SqlConnection( Configurati
9、onSettings .AppSettings(“DBConnStr“) Dim cmd As New SqlCommand cmd.Connection = conn cmd.CommandType = CommandType.Text cmd.CommandText = “SELECT * FROM tblStudents ; SELECT * FROM tblUsers” - 访问下一个结果集的方法是 dr.NextResult(),使用DataReader填充控件(遍历数据表中的记录) Dim conn As New SqlConnection(ConfigurationSetting
10、s .AppSettings(“DBConnStr“) Dim cmd As New SqlCommand(“SELECT DISTINCT Class FROM tblStudents“, conn) conn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader While dr.Read DropDownList1.Items.Add(dr(“Class“) End While dr.Close() conn.Close(),7.3 在ASP.NET中使用list-bound控件,存在问题: 使用Response.Write(DataRea
11、der(“字段名”)的方式输出数据库记录比较麻烦,而且界面上很难做得美观。 解决办法: 将DataReader对象赋值到相关控件的DataSource数据源属性,并且执行控件中的DataBind()方法以实现数据绑定。,ASP.NET提供了一种简单的方法来显示ADO.NET中的数据,具体可分为以下几个步骤: 将数据相关的Web服务器控件添加到页面上 将DataReader对象赋给控件的DataSource属性 执行控件的DataBind()方法,7.3.1 列表框和下拉框控件,用DropDownList显示班级列表 Dim dr As SqlDataReader = cmd.ExecuteRe
12、ader DropDownList1.DataSource = dr 设置将数据表的哪个字段显示在DropDownList1当中 DropDownList1.DataTextField = “Class“ DropDownList1.DataBind() 数据绑定,用ListBox显示学生列表 ListBox1.DataSource = cmd.ExecuteReader 设置将数据表的哪个字段显示在ListBox1当中 ListBox1.DataTextField = “Name“ 设置将数据表的哪个字段作为ListBox1的选项值 ListBox1.DataValueField = “St
13、udentID“ ListBox1.DataBind(),使用DataGrid显示数据 Dim cmd As New SqlCommand DataGrid1.DataSource = cmd.ExecuteReader DataGrid1.DataBind(),7.3.2 使用单选按钮列表,使用单选按钮列表显示数据 请参考DropDownList和ListBox等控件访问数据库的方法。,7.3.3 使用复选框和列表框进行多项选择,显示复选框控件 方法类似于DropDownList显示数据库的数据。 查看来自多个选项的数据 主要工作是判断CheckBox哪项被选中。 请参考例程7.27,Dim
14、 strSelectionResult As String Dim itm As ListItem For Each itm In ckbStudents.Items strSelectionResult &= itm.Value Next,If strSelectionResult String.Empty Then grdStudents.Visible = True Else grdStudents.Visible = False End If,7.3.4 Repeater控件,Repeater用于自定义列表、表格来显示数据 Repeater控件没有可视化设计界面,需要在HTML中编写代
15、码。 绑定数据源 Repeater控件可以绑定任何数据源,如DataReader对象或DataSet对象。,ItemTemplate:定义数据源中每一行的内容和外观。 AlternatingItemTemplate:定义数据源中的间隔行的内容和外观,它是可选的,用来创建容易读取的表格。 HeaderTemplate:定义表格头部的外观。 FooterTemplate:定义表格尾部的外观。 SeparatorTemplate:定义行与行之间的分隔元素。,定义模板 ,编写HeaderTemplate 姓名 国家 ,编写ItemTemplate , ,编写AlternatingItemTemplat
16、e的代码 , ,DataBinder.Eval中的格式串,请参考例程7.33和7.34,7.3.5 DataList控件,DataList用于显示数据。它除了拥有Repeater的功能,还提供了更多的功能。 DataList支持使用可视化工具设计模板的功能。,和Repeater一样,DataList同样支持ItemTemplate、AlternatingItemTemplate、HeaderTemplate、FooterTemplate、SeparatorTemp模板,同时还另外提供了两个模板: SelectedItemTemplate 选择模式的模板 EditItemTemplate 编辑模式的模板,使DataList数据表拥有按钮 ,DataList中的按钮命令以及对应的事件 请注意这些CommandName值是区分大小写的,如何进