配色: 字号:
第15章
2016-06-21 | 阅:  转:  |  分享 
  
第15章ASP.NET/SQLServer开发与编程15.1ADO.NET模型15.1ADO.NET模型15.1A
DO.NET模型15.1ADO.NET模型15.1ADO.NET模型15.2连接数据库15.2连接数
据库15.2连接数据库15.3.1Command对象15.3.1Command对象15.3.1Comm
and对象15.3.2DataAdapter对象15.3.2DataAdapter对象15.3.2DataAd
apter对象15.4.1DataReader对象的属性和方法15.4.2使用DataReader对象访问数据1
5.4.2使用DataReader对象访问数据15.4.2使用DataReader对象访问数据15.4.2使用Da
taReader对象访问数据15.5.1DataSet对象15.5.1DataSet对象15.5.1DataS
et对象15.5.1DataSet对象15.5.1DataSet对象15.5.1DataSet对象15.5.1
DataSet对象15.5.2数据库查询操作15.5.2数据库查询操作15.6执行存储过程15.6
执行存储过程15.6执行存储过程15.6执行存储过程15.6执行存储过程15.6执行存储过程15.6
执行存储过程15.6执行存储过程方法二:使用DataAdapter对象执行存储过程xsInfo。设计步骤如下:(1)创
建项目Proj5_2。(2)设计项目主页面Main5_2.aspx的界面,各控件的属性列于表15.17中。见说明①??
DsStu1DataSet数据控件见说明①??ConnSqlDataAdapter数据控件??Connect
ionStringConnSqlConnection数据控件xsInfoDataMember自动套用格式;数据属性设置
见说明②。DsStu1DataSourceDataGrid1DataGridWeb控件标签文本为:执行存储过程xsIn
fo后的结果字体:黑体;大小:Large;颜色:#3333ff;背景:#ccffff;边框样式:双线style-Labe
lHTML控件备注属性值属性控件标识控件名控件类别程序界面中加入SqlDataAdapter控件后,
将进入“数据适配器配置向导”,选择或新建数据连接后,在界面中选择“使用现有存储过程”,单击“下一步”;将出现图15.6所示的选择存
储过程窗口,在其中选择要执行的存储过程(本例选择xsInfo),单击“下一步”;数据适配器配置完成,如图15.7所示。接下去生成数
据集DsStu1。②在3个数据控件均配置完成之后,才可设置DataGrid控件的数据属性,方法是,在DataGrid属性窗口
中选择数据源为“DsStu1”,数据成员为“xsInfo”。(3)在Main3_2.aspx界面的空白处双击,进入程序编辑窗
口,在Page_load()事件处理中输入以下程序代码:PrivateSubPage_Load(ByValsenderA
sSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
SqlConn.Open()SqlDtAdpt.Fill(DsStu1,"xsInfo")
DataGrid1.DataBind()SqlConn.Close()EndSub(4)
编译程序。选择主选单的“生成”?“生成解决方案”。(5)运行程序,结果与图15.5相同。是否显示表头(Header),Tr
ue/False。ShowHeader是否显示脚注(Footer),True/False。ShowFooter被选定的项目
(Item)SelectedItem选定列(以Selected样版样式显示)SelectedIndex每页显示的纪录数
PageSize总页数(只读)PageCount水平对齐方式HorizontalAlign是否显示网格线(在Repeat
Layout设为Table时有效)GridLines设定被编辑的字段名称(-1表示放弃编辑)EditItemIndex
指定数据源DataSource主键字段DataKeyField数据页数(在程序中设定)CurrectPageIndex
控件所显示的字段数(只读)Columns储存格和储存格边框的距离CellSpacing储存格与表格边框的距离CellP
adding表格背景图形BackImageUrl自动产生数据源中每一字段数据AutoGenerateColumns数据排
序AllowSorting分页AllowPaging说明属性1.DataGrid控件的属性和事件Data
Grid控件的常用属性和事件分别列于表15.18和15.19中。当点击DataGrid控件的“更新”按钮时触发该事件,参数与On
ItemCommand相同。OnUpdateCommand在选择要排序的字段时触发(属性AllowSorting为True时有
效)OnSortCommand在不同的数据页被选取时便触发OnPageIndexChanged当点击DataGrid控件的
“编辑”按钮时触发该事件,参数与OnItemCommand相同。OnEditCommand当点击DataGrid控件的“删除”
按钮时触发该事件,参数与OnItemCommand相同。OnDeleteCommand当点击DataGrid控件的“取消”按钮
时触发该事件,参数与OnItemCommand相同。OnCancelCommand当用户点击DataGrid控件中的Butto
n、ImageButton或LinkButton等按钮控件时触发此事件。该事件的参数为DataListCommandEventAr
gs,该参数可取值为:CommandArgument:获取按钮控件指定的选择参数;CommandName:获取按钮控件指定的命
令名;CommandSource:获取被点击的按钮对象;Item:获取按钮对象所在的数据行,返回DataGridItem对象。
OnItemCommand说明事件ADO.NET对象模型的两个主要成员是.NET数据提供程序和DataSet对
象。ADO.NET的主角是DataSet,它是一个内存数据库。DataSet中可以包含多个数据表,可在程序中动态地产生数据
表。每个表由数据列(DataColumn)和数据行(DataRow)组成,如图15.2所示。DataSet提供方法
对数据集中表数据进行浏览、编辑、排序、过滤或建立视图(View)。DataSet对象模型如图所示。?在ASP.Ne
t应用程序中访问数据库,需要在程序开始处用Import引入相应的命名空间。例如,若在程序中访问SQLServer2000,则需
要使用以下语句:<%@ImportNamespace="System.Data"%><%@ImportNamespa
ce="System.Data.SqlClient"%>若在程序中访问OLE数据源或SQLServer6.5或
更前的版本,则需要使用以下语句:<%@ImportNamespace="System.Data"%><%@Import
Namespace="System.Data.OleDb"%>(1)SQL数据库常用的类这些类位于System.Data.
SqlClient命名空间下,用于SQLServer2000数据库操作,表15.1列出SQL数据库常用的类。以只读方式读取数据
源的数据,一次只能读取一条记录。SqlDataReader执行SQL命令并返回DataSet类型结果。SqlDataAdap
ter执行SQL命令并返回SqlDataReader类型结果。SqlCommand建立数据库连接。SqlConnectio
n说明类SqlCommand和OleDbCommand、SqlAdapter和OleDbAdapte
r以及SqlReader和OleDbReader都与之类似。获取数据库客户端标识。默认为客户端计算机名。此属性只适用于SQL
Server数据库。WorkstationId获取数据库的连接状态,返回1表示联机,0表示关闭。State获取数据库驱动程
序的版本。ServerVersion获取OLEDB提供程序的名称。此属性只有OLEDB数据源才可使用。Provider
获取与SQLServer通信的网络数据包的大小,单位为字节。默认为8192。此属性只有SQLServer数据库才可使用。P
acketSize获取数据员的完整路径及文件名,若是SQLServer数据库则获取所连接的SQLServer服务器名称。D
ataSource获取当前数据库名称,默认为Nothing。Database获取Connection对象的超时时间,单位为秒
,为0表示不限制。即若在这个时间之内Connection对象无法连接数据源,则返回失败。ConnectionTimeout取得
或设置连接字符串。ConnectionString说明属性Connection对象的常用属性和方法如表15.3中。
调用Close()方法关闭与数据库的连接,并释放所占用的系统资源。Dispose()创建并返回与Connection对象有关的
Command对象。CreateCommand()在打开连接的状态下,更改当前数据库。ChangeDatabase()关闭
数据库连接。Close()打开与数据库的连接。注意ConnectionString属性只对连接属性进行了设置,并不打开与数据库
的连接,必须使用Open()方法打开连接。Open()说明方法Connection对象的Connec
tionString属性用于获取或设置与数据库的连接字符串。对于SQLServer2000数据库,ConnectionStri
ng属性包含的主要参数有:DataSource(Server):设置需连接的数据库服务器名。InitialCata
log(Database):设置连接的数据库名称。IntegratedSecurity:服务器的安全性设置,是否使用
信任连接。值有True、False和SSPI三种,True和SSPI都表示使用信任连接。WorkstationId:数据库
客户端标识。默认为客户端计算机名PacketSize:获取与SQLServer通信的网络数据包的大小,单位为字节,有效值
为512~32767,默认值为8192。UserID(UID):登录SQLServer的帐号。Password(P
wd):登录SQLServer的密码。ConnectionTimeout:设置SqlConnection对象连接SQL数据库
服务器的超时时间,单位为秒,若在所设置的时间内无法连接数据库,则返回失败。Connection对象的事件有以下两个:Info
Message:在.NET数据提供程序发送警告或信息时触发该事件。StateChange:当数据连接状态改变时(即调用Ope
n()或Close()方法)触发该事件。该事件的参数为StateChangeEventArgs,有两种取值:CurrentSta
te:获取Connection对象连接的新状态,为1表示联机,为0表示关闭;OriginState:获取Connection对象
连接的原始状态,为1表示联机,为0表示关闭。ADO.NET提供的Command对象对数据源执行各种SQL命令或存储
过程,可返回DataReader对象,或执行对数据表的更新操作。SQL命令参数集合。Parameters获取或设置Comma
nd对象所使用的数据连接属性。Connection获取或设置命令类别,可取的值:StoredProcedure,TableDi
rect,Text,代表的含义分别为:存储过程、数据表名和SQL语句,默认为Text。数字、属性的值为CommandType.St
oredProcedure、CommandType.Text等。CommandType获取或设置Command对象的超时时间超
时时间,单位为秒,为0表示不限制。默认为30秒,即若在这个时间之内Command对象无法执行SQL命令,则返回失败。Comman
dTimeout取得或设置要对数据源执行的SQL命令、存储过程或数据表名。CommandText说明属性Comma
nd对象的主要属性和方法分别列于表15.5中。执行CommandText属性指定的内容,返回XmlReader对象。只有SQL
Server才能用此方法。ExecuteXmlReader()执行CommandText属性指定的内容,返回结果表第一行第一列
的值。该方法只能执行Select命令。ExecuteScalar()执行CommandText属性指定的内容,返回DataRe
ader对象。ExecuteReader()执行CommandText属性指定的内容,返回数据表被影响行数。只有Update、
Insert和Delete命令会影响的行数。该方法用于执行对数据库的更新操作。ExecuteNonQuery()创建Param
eter对象。CreateParameter取消Comand对象的执行。Cancel()说明方法Command对
象的CommandType属性用于设置命令的类别:可以是存储过程、表名或SQL语句。【例15.1】修改xscj数据库XS数据
表记录,使学号020101的总学分+5。程序代码如下:<%@ImportNamespace="System.Data"%
><%@ImportNamespace="System.Data.SqlClient"%>e="VB"Runat="Server">subpage_loadDimconnAsnewSqlConnectio
n()''定义Connetction对象conn.ConnectionString="DataSource=My
SRV1;IntegratedSecurity=false;InitialCatalog=XSCJ;PacketSize
=4096;uid=sa;pwd=;"conn.Open()
''打开与数据库的连接 DimcmdAsNewSqlCommand("UpdateXSsetzxf=z
xf+5wherexh=''001101''",conn)cmd.ExecuteNonQuery()
''执行SQL语句 conn.Close() ''关闭数据连接endsub
获取或设置更新数据源中的数据行的SQL命令。该值为Comand对象。Update
Command获取或设置查询数据源的SQL命令。该值为Comand对象。SelectCommand获取或设置向数据源中插入数
据行的SQL命令。该值为Comand对象。InsertCommand获取或设置删除数据源中的数据行的SQL命令。该值为Coma
nd对象。DeleteCommand获取或设置当执行Update()方法更新数据源发生错误时是否继续。默认为False。Co
ntinueUpdateOnError说明属性DataAdapter对象的DeleteComman
d、InsertCommand和UpdateCommand属性只有在调用Update()方法,DataAdapter对象得知数据源
的数据行后才可使用。调用InsertCommand或UpdateCommand或DeleteCommand属性指定的SQL命令
,将DataSet对象更新到相应的数据源。参数dataSet指定要更新到数据源的DataSet对象,srcTable参数为数据表对
应的来源数据表名。该方法的返回值为影响的行数。Update(dataset,srcTable)将数据集的SelectComma
nd属性指定的SQL命令执行后所选取的数据行置入参数dataSet指定的DataSet对象。Fill(dataset,srcTa
ble)说明方法Fill()用于新增或更新DataSet中的记录;当新增、修改或删除DataSet中的记录时,
并需要更改数据源时,使用Update()方法。当调用Update()方法、在开始执行SQL命令时会触发该事件。RowUpdat
ing当调用Update()方法并执行完SQL命令时会触发该事件。RowUpdated调用DataAdapter的Fill(
)方法时若发生错误则触发该事件。FillError说明事件使用DataAdapter可以执行多个SQL命令。在执行D
ataAdapter对象的UpDate()方法之前,所操作的都是数据集(即内存数据库)中的数据,只有执行了Update()方法后,
才会对物理数据库进行更新。使用DataAdapter对象对数据进行更新操作分为三个步骤:创建DataAdapter对象并设置Up
dateCommand等属性;(2)指定更新操作;(3)调用Update()方法执行更新。DataAdapter对象
的InsertCommand、UpdateCommand和DeleteCommand属性是对数据进行相应更新操作的模板,当调用Up
date()方法时,DataAdapter对象将根据需要的更新操作去查找相应属性(即操作模板),则会产生错误。DataRead
er对象的属性和方法分别列于表15.9和15.10中获取在执行Insert、Update或Delete命令后受影响的行数。该属
性只有在读取完所有行且DataReader对象关闭后才会被指定。ReacordsAffected获取或设置表字段值,name为
字段名;col为列序号,序号从0开始。例如:objReader.Item(0)、objReader.Item("name")。I
tem({name,col})获取DataReader对象的状态,为True表示关闭。IsClosed获取DataReade
r对象包含的记录行数。FieldCount说明属性读取下一条记录,返回布尔值,返回True表示有下一条记录;返回Fa
lse表示没有下一条记录。Read()若序号为Col的列为空值,则返回True,否则返回False。IsDBNull(Col
)获取所有字段的值,并讲字段值存放在values数组中。GetValues(values)获取序号为Col的列的值。Get
Value(Col)获取字段名为Name的列的序号。GetOrdinal(Name)获取序号为Col的列的字段名。GetN
ame(Col)获取序号为Col的列数据类型。GetFieldType(Col)获取序号为Col的列的来源数据类型名。Ge
tDataTypeName(Col)获取序号为Col的列的值,所获取列的数据类型必须为Boolean类型;其他类似的方法还有:G
etByte、GetChar、GetDateTime、GetDecimal、GetDouble、GetFloat、GetInt16
、GetInt32、GetInt64、GetString等。GetBoolean(Col)关闭DataReader对象。Cl
ose()说明方法15.4.1DataReader对象的属性和方法1.基本的数据访问使用DataReader
对象读取数据的步骤如下:使用Connection对象创建数据连接。使用Command对象的ExecuteReader(
)方法执行SQL查询或存储过程,创建DataReader对象。成功创建该对象后,可使用其属性和方法访问数据。在VS.
NET中没有与DataReader对应的可视化数据控件,因此对该对象的操作必须编写代码完成。【例15.2】使用DataReade
r对象访问XSCJ数据库的xs数据表,将所有记录以表格的形式显示出来。本例给出两种解决方法:一是在VS.NET环境中设
计该程序;二是直接在编辑器中编写所有程序代码,读者可以将它们进行对比。方法一:在VS.NET中进行设计。(1)
创建项目Proj1。(2)设计项目主页面Main1.aspx的界面,包含一个Label控件、一个DataGrid控件、一个Sq
lConnection控件和一个Command控件,各控件的属性列于表15.11中。SelectFromxsComma
ndText?ConnConnectionCmdSqlCommand数据控件生成连接数据库xscj字符串-Con
nectionStringConnSqlConnection数据控件使用“自动套用格式”中的“彩色型2”--Data
Grid1DataGridWeb控件标签文本为:学生信息字体:隶书;大小:X-Large;背景:#ccccffstyl
e-LabelHTML控件备注属性值属性控件标识控件名控件类别(3)在Main1.aspx界面的空白处双击,
进入程序编辑窗口,在Page_load()事件处理中输入以下程序代码:PrivateSubPage_Load(ByVals
enderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBa
se.LoadDimobjReaderAsSystem.Data.SqlClient.SqlDataR
eader ''定义SqlDataReader对象conn.Open()
''建立到数据源的连接objReader=
cmd.ExecuteReader()创建DataReader对象DataGrid1.Da
taSource=objReader设置DataGrid的数据源DataGrid1.Dat
aBind()''数据绑定并显示conn.Clos
e()''关闭到数据源的连接EndSu
b(4)编译程序。选择主选单的“生成”?“生成解决方案”。(5)运行程序,结果如图15.4所示。DataSet对象
包括3个集合:DataTableCollection(数据表的集合,包括多个DataTable对象)、DataRowCollect
ion(行集合,包含多个DataRow对象)和DataColumnCollection(列集合,包含多个DataColumn对象)
。获取数据集的数据表集合(DataTableCollection),DataSet对象的所有DataTable对象都属于Data
TableCollection。TablesDataSet对象内的数据表是否存在错误行。HasErrors获取或设置执行数
据更新操作时是否遵循约束。默认为True。EnforceConstraints获取或设置DataSet对象的名称。DataS
etName获取或设置在DataTable对象中字符串比较时是否区分字母的大小写。默认为False。CaseSensitive
说明属性【例15.3】使用DataSet对象访问XSCJ数据库的xs数据表,将所有记录以表格的形式显示出来。在Pag
e_load()事件处理中输入以下程序代码:SubPage_Load(SenderAsObject,eAsEvent
Args)DimconnAsNewSqlConnection()DimcmdAsNewSqlC
ommand()DimDsStu1AsNewDataSet()conn.ConnectionString=
"DataSource=MySRV1;IntegratedSecurity=false;"&_"InitialCat
alog=XSCJ;PacketSize=4096;uid=sa;pwd=;"conn.Open()cmd
.Connection=conncmd.CommandText="Selectfromxs"
DimDtAdptAsNewSqlDataAdapter(cmd)DtAdpt.Fill(DsStu1,"stu
dents")DataGrid1.datasource=DsStu1DataGrid1.DataBind()
''数据绑定Conn.Close()''关闭到数据
源的连接EndSub2.数据表集合和DataTable对象DataSet的所有数据表包含于数据表集合DataTableC
ollection中,通过DataSet的Tables属性访问DataTableCollection。DataTableColle
ction有以下两个属性:Count:DataSet对象所包含的DataTable个数。Item({index,n
ame}):获取DataTableCollection中下标为index或名称为name的数据表。DataTableColle
ction有以下常用方法:Add({table,name}):向DataTableCollection中添加数据表。C
lear():清除DataTableCollection中的所有数据表。CanRemove(table):判断参数table
指定的数据表能否从DataTableCollection中删除。Contains(name):判断名为name的数据表是否
被包含在DataTableCollection中。IndexOf({table,name}):获取数据表的序号。Re
move({table,name}):删除指定的数据表。RemoveAt(index):删除下标为index的数据表。获取
或设置数据表名。TableName获取数据表的所有行,即DataRowCollection集合。Rows获取或设置数据表的
主键.PrimaryKey获取与数据表相关的DataView对象。DataView对象可用来显示DataTable对象的部分数
据。可通过对数据表选择、排序等操作获得DataView(相当于数据库中的视图)。DefaultView获取DataTable对
象所属的DataSet对象。DataSet获取数据表的所有字段,即DataColumnCollection集合。Column
s说明属性每个数据表都是一个DataTable对象。表15.13、表15.14和表15.15分别列出了DataTabl
e对象的常用属性、常用方法和事件。获取包含错误的DataRow对象数组。GetErrors()创建一个与当前数据表有相同字段
结构的数据行。NewRoe()复制DataTable对象的结构和数据,返回与本DataTable对象具有同样结构和数据的Dat
aTable对象。Copy()说明方法数据行被成功删除后将触发该事件。该事件参数为DataRowDeleteEven
tArgs,可以取的值与RowChanged事件的DataRowChangeEventArgs参数相同。RowDeleted当
数据行更新成功时将触发该事件。该事件参数为DataRowChangeEventArgs,可以取的值为:Action(对数据行进行的
更新操作名,包括:Add—讲行加入数据表;Change—修改数据行内容;Commit—数据行的修改已提交;Delete—数据行已被
删除;RollBack—数据行的更改被取消);Row(发生更新操作的数据行)。RowChanged当数据行中某字段值发生变化时
将触发该事件。该事件参数为DataColumnChangeEventArgs,可以取的值为:Column(值被改变的字段);Row
(字段值被改变的数据行)。ColumnChanged说明事件DataTable的创建有两种方法,一种是由数据库中的数
据创建,这需要使用DataAdapter对象的Fill方法填充数据集;另一是直接使用程序代码创建数据表。3.数据列集合和Dat
aColumn对象数据表的所有字段都被存放于数据列集合DataColumnColection中,通过DataTable的Colu
mns属性访问DataColumnCollection。Count:数据表所包含的字段个数。Item({index,
name}):获取下标为index或名称为name的字段。数据表中的每个字段都是一个DataColumn对象。获取包含该字段
的DataTable对象。Table获取或设置新增数据行时,字段的值是否可修改。默认值为False。ReadOnly获取或
设置新增数据行时,字段的默认值。.DefaultVale获取或设置字段的数据类型。DataType获取或设置字段名。Co
lumnName获取或设置字段标题。若未指定字段标题,则字段标题即为字段名。该属性常与DataGrid配合使用。Caption
设置该字段可否为空值。默认值为true。AllowDBNull说明属性通过DataColumn对象的DataTyp
e属性设置字段数据类型时,不可直接设置数据类型,而要按照以下语法格式:DataColumn对象名.DataType=Syst
em.Type.GetType("数据类型")其中的"数据类型"取值为.NETFramework数据类型,常用的值如下:Sy
stem.Boolean—布尔型System.Char—字符型System.DateTime—日
期型System.Decimal—数值型System.Double—双精度数据类型
System.Int16—短整数类型System.Int32—整数类型System.Int6
4—长整数类型System.Single—单精度数类型System.String—字符串类型4.数据
行集合和DataRow对象Item({index,columnName}):获取或设置指定字段的值。Table:获取包
含该数据行的DataTable对象。DataRow对象的方法主要有:AcceptChanges():将所有变动过的数据行更
新到DataRowCollection。Delete():删除数据行。IsNull({colName,index,Co
lumn对象名}):判断指定列或Column对象是否为空值。使用Select的Where子句指定条件进行过滤和Orderb
y子句进行排序;使用DataView对象来筛选和排序数据。1.DataView对象及使用DataView对象可看作Da
taTable对象的子集,它是DataTable的映射。DataView与DataTable的关系类似于数据库系统中的视图与表的关
系。DataView对象的主要属性有:AllowDelete:获取或设置是否允许删除DataView中的数据行。类似的属性还有AllowEdit、AllowNew。Count:获取DataView对象中包含的数据行数。Item(recordIndex):获取DataView对象中下标为recordIndex的DataRowView对象(即DataView中的数据行),Item可省略不写。RowFilter:获取或设置选取数据行的表达式(即过滤条件)。Sort:获取或设置排序字段和方式。Table:获取或设置DataView对象对应的数据表名。DataView对象的主要方法有:AddNew():添加一条记录到DataView对象中。Delete(index):删除下标为index的数据行。DataView对象最主要的用途是与数据显示控件(Repeater、DataList和DataGrid)配合使用,可方便地绑定到这3个服务器控件,实现数据的展示,并能实时反映出数据的变化。2.执行带参数查询使用DataAdapter对象执行带参数的SQL查询,其方式与在Command对象中执行带参数查询是一样的,因为DataAdapter是建立在Command对象之上的。【例15.5】通过执行SQLServer2000数据库xscj的存储过程xsInfo,查询学生的学号、姓名、课程名、成绩和学分等信息并显示。创建存储过程xsInfo的SQL命令如下:Usexscj/检查是否xsInfo存储过程是否已存在,若是则删除/IfExists(SelectnameFromsysobjectsWherename=''xsInfo''andtype=''P'')DropProcedurexsInfoGo/创建存储过程xsInfo/CREATEPROCEDURExsInfoASSelectxs.XH,xs.XM,kc.KCM,cjFromxs,kc,xs_kcWherexs.XH=xs_kc.XHandkc.KCH=xs_kc.KCHGO方法一:使用Command对象执行存储过程xsInfo。(4)编译程序。选择主选单的“生成”?“生成解决方案”。(5)运行程序,结果如图15.5所示。
献花(0)
+1
(本文系信检彭博海...首藏)