SqlDataSource支持更新_第1页
SqlDataSource支持更新_第2页
SqlDataSource支持更新_第3页
SqlDataSource支持更新_第4页
SqlDataSource支持更新_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SqlDataSource支持更新操作 一定要记得更新sqldatasource!1 C#除非指定UpdateCommand,否则数据源SqlDataSource不支持更新操作。更新完数据库一定要记得更新sqldatasource!虽然不是什么大错,但是改了,页面才会百分百不出错,看着也舒服些么! 下面就是更新它的一个简单举例:SqlDataSource1.UpdateCommand = UPDATE PlayList SET PlayTime=+time2+, PlayBorder=+border+;2来看看原因吧:SqlDataSource控件 SqlDataSource控件是一个数据源控

2、件,代表与一个关系型数据存储(诸如SQL Server或Oracle或任何一个可以通过OLE DB或ODBC桥梁访问的数据源)的连接。3 我们使用两个主要属性建立数据存储的连接: ConnectionString和ProviderName。前一个属性表示连接字符串,包含了打开与底层引擎会话所需的足够信息。后一个属性规定此操作使用的ADO.NET托管提供程序的命名空间。ProviderName属性默认为System.Data.SqlClient,这表示默认的数据存储是SQL Server。例如,要瞄准一个OLE DB提供程序,则使用System.Data.OleDb字符串。4 该控件既可以使用数

3、据适配器也可以使用命令对象检索数据。根据我们的选择,获取的数据将被封装到一个DataSet对象或一个数据阅读器中。如下代码片断说明了激活一个绑定到一个SQL Server数据库的SQL数据源控件所需的最少代码: asp:SqlDataSource runat=server ID=MySqlSource ProviderName= ConnectionString= SelectCommand=SELECT * FROM employees /51. SqlDataSource控件的编程接口DeleteCommand, DeleteParameters,DeleteCommandType 获得或

4、设置用来删除底层数据存储中的数据行的SQL语句、相关参数以及类型(文本或存储过程)。FilterExpression, FilterParameters 获得或设置用来创建使用Select命令获取的数据之上的过滤器的字符串(和相关参数)。只有当控件通过DataSet管理数据时才起作用。6InsertCommand, InsertParameters,InsertCommandType 获得或设置用来在底层数据存储中插入新行的SQL语句、相关参数和类型(文本或存储过程)。SelectCommand, SelectParameters,SelectCommandType 获得或设置用来从底层数据存

5、储中获取数据的SQL语句、相关参数和类型(文本或存储过程)。7SortParameterName 获得或设置一个命令的存储过程将用来存储数据的一个输入参数的名称。(这种情况下的命令必须是存储过程。)如果缺少该参数,则会引起一个异常。UpdateCommand, UpdateParameters,UpdateCommandType 获得或设置用来更新底层数据存储中的数据行的SQL语句、相关参数和类型(文本或存储过程)。8 每个命令属性都是一个字符串,包含将要使用的SQL文本。命令可以有选择地包含关联参数集中列出的参数。托管提供程序及其底层的关系引擎决定SQL要使用的确切语法以及嵌入参数的语法。例

6、如,如果数据源控件指向SQL Server,则命令参数名必须以symbol为前缀。如果目标数据源是一个OLE DB提供程序,则参数是无名的,用一个?占位符符号标识,并且按位置进行定位。如下代码片断展示了一个更复杂的数据源控件,其中启用了参数化删除和更新命令:9asp:SqlDataSource runat=server ID=MySqlSource ConnectionString= SelectCommand=SELECT * FROM employees UpdateCommand=UPDATE employees SET lastname=lname DeleteCommand=DELE

7、TE FROM employees WHERE employeeid=TheEmp FilterExpression=employeeid 3 10 FilterExpression属性适用的语法与DataView类的RowFilter属性适用的语法相同,而后者又类似于SQL WHERE子句使用的语法。如果FilterExpression需要是参数化的,则可以通过FilterParameters集合指明参数。只有在DataSourceMode设置为DataSet时才能启用过滤功能。 注意过滤器表达式和Select命令上的参数之间的区别。该命令上的参数影响数据存储返回的结果集;而过滤器表达式限制

8、通过Select命令返回的结果集的显示内容。11SqlDataSource类的其他属性CancelSelectOnNullParameter 指示如果一个参数等于null是否撤销数据检索操作。默认值为true。ConflictDetection 决定该控件在一次删除或更新操作期间应如何处理数据冲突。在默认情况下,同时发生的变更被覆盖。ConnectionString 连接到数据库的连接字符串。DataSourceMode 指示应如何返回数据:通过DataSet还是通过数据阅读器。12OldValuesParameterFormatString 获得或设置一个格式字符串,该格式字符串应用于传递给

9、Delete或Update方法的任何参数的名称。ProviderName 指示将要使用的ADO.NET托管提供程序的命名空间。 有趣的是,这些属性中有很多映射了实际视图类上定义的相同属性。13 SqlDataSource对象有几个方法和事件,在大多数情况下所有的数据源组件都有这些方法和事件。其中方法包括Delete, Insert, Select和Update,并且它们是作为底层数据源视图类的对应方法的惟一封装器实现的。这些事件成对存在:Deleting/Deleted、Inserting/Inserted、Selecting/Selected和Updating/Updated,并且在上述方法

10、之前和之后激发。过滤操作的开始通过Filtering事件发出信号。14 如前所述,ASP.NET 2.0特有的控件是惟一真正地利用数据源控件的能力的控件。因而,后面两章专门介绍GridView, DetailsView和FormView控件,到时将会看到大量示例代码,它们说明了如何使用SqlDataSource控件进行选择、更新、分页和排序。在本章中,我们将花更多的时间来讨论该控件的其他特征,这些特征特别适合在实际应用中使用。15声明性参数 每个命令属性都有自己的参数集ParameterCollection集合类的一个实例。ASP.NET 2.0支持不少参数类型。ControlParamete

11、r 从一个服务器控件的任何公共属性获得该参数值。CookieParameter 根据指定的HTTP cookie的内容设置参数值。FormParameter 从HTTP请求窗体的指定输入字段中获取该参数值。Parameter 获取由代码分配的参数值。16Pro 从根据应用程序的个性化机制创建的配置文件对象中的指定属性获取该参数值。QueryStringParameter 从请求查询字符串中的指定变量获取该参数值。SessionParameter 根据指定的会话状态槽的内容设置该参数值。17 每个参数类都有一个Name属性以及它的作用和实现特有的属性集。为了理解数据源控件中的声明性参数,让我们看

12、看如下代码:asp:SqlDataSource runat=server ID=MySource ConnectionString= SelectCommand=SELECT * FROM employees WHERE employeeid MinID 18 该查询包含一个名为MinID的占位符。该数据源控件用ControlParameter对象返回的信息自动地填充该占位符。控件参数的值由给定控件上的给定属性所决定。PropertyName属性规定了该属性的名称;而该控件的ID在ControlId属性中。为了使前面的代码起作用,页面开发人员必须保证该页面包含一个具有给定的ID和属性的控件;否

13、则,抛出一个异常。在本例中,EmpID控件上的Text属性的值被用作匹配参数的值。19 形参(命令文本中的占位符)和实际值之间的绑定,取决于底层的托管提供程序如何处理和辨认参数。如果提供程序类型支持有名的参数(象SQL Server和Oracle那样),则这种绑定涉及将占位符的名称与参数的名称进行匹配。否则,这种匹配是基于位置的。因此,第1个占位符绑定到第1个参数,以此类推。这就是使用OLE DB访问数据时发生的情况。20冲突检测 SqlDataSource控件能够以两种方法之一有选择地执行数据库侵入的操作(删除和更新)。数据源控件与数据绑定控件相联系,因此,同时读取数据,也许还要在客户端进行

14、修改,然后进行更新,这种思想并不是牵强的。在多个用户拥有对数据库的读/写访问的情况下,如果他们企图操作的记录同时被修改了,则更新/删除方法的行为应怎样呢?21 SqlDataSource控件使用ConflictDetection属性确定在执行更新和删除操作时要做什么。该属性被声明为ConflictOptions枚举类型;其默认值是OverwriteChanges,这就是说,无论该行中的值自上一次被读取以来有没有发生变化,任何侵入操作都会发生变化。另一个值是CompareAllValues,它只是确保SqlDataSource控件将从数据库读取得原始数据,传给底层视图类的Delete或Updat

15、e方法。22 除非这样编写删除或更新语句,即如果该行中的数据不匹配最初读取的数据,则命令失败,否则改变ConflictDetection的值不会产生任何显著效果,注意到这一点是重要的。为做到这一点,应如下面这样定义命令:UPDATE employees SET firstname=firstnameWHERE employeeid=employeeid AND firstname=original_firstname23 换句话说,我们必须显式地向命令添加一个额外的子句,检查正被修改的字段的当前值是否仍然匹配最初读取的值。这样,多个用户同时输入的中间变更使WHERE子句失败,从而使命令失败。我

16、们自己负责调整命令文本;把ConflictDetection设置为CompareAllValues是不够的。 如何格式化表示旧值的参数的名称?SqlDataSource控件使用OldValuesParameterFormatString属性格式化这些参数名。默认值是original_0。24 如果使用CompareAllValues选项,则可以处理数据源控件上的Deleted或Updated事件,以检查多少行受到影响。如果该操作没有影响任何记录,则可能会发生并发违规(concurrency violation):void OnUpdated(object sender, SqlDataSour

17、ceStatusEventArgs e) if (e.AffectedRows = 0) . 25缓存行为 一个数据绑定控件与它的数据源组件之间的数据绑定是自动完成的,并在由数据绑定控件引起的每次页面回发时发生。假设一个页面有网格、一个数据源控件和一个按钮。如果以编辑模式打开该网格,则Select命令运行;如果单击该按钮(在数据绑定控件的边界之外),则根据视图状态重建该网格的UI,并且不会运行任何Select语句。 为了在每次回发时保存一个查询,可以要求数据源控件缓存给定期间内的结果集。在数据被缓存的时间里,Select方法从缓存(而不是底层数据库)中检索数据。在该缓存期满时,Select方法

18、从底层数据检索数据,并新数据存回到缓存中。SqlDataSource的缓存行为由表9.13中的属性所控制。26CacheDuration 指示数据应当在缓存中保留多久(以秒为单位)。CacheExpirationPolicy 指示缓存期限是绝对的还是可调整的。如果是绝对的,则在规定的秒数之后使缓存中的数据无效。如果是可调整的,则使那些在指定期限内没有用过的数据无效。CacheKeyDependency 指示用户定义的缓存键的名称,该缓存键链接到数据源控件创建的所有缓存项。通过终止该键,可以清楚该控件的缓存。EnableCaching 启用或禁用缓存支持。27SqlCacheDependency 获得或设置一个用分号分隔的字符串,指示哪些数据库和表用于SQL Server缓存依赖。 SelectCommand、ConnectionString和SelectParameters的每种不同组合创建一个缓存项。如果多个SqlDataSource控件正好装载相同数据库中的相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论