`
isiqi
  • 浏览: 16156884 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ASP.NET - 对 SqlDataSource 控件使用参数

阅读更多

通常,SQL 语句和存储过程包括运行时计算的参数。使用参数编写的 SQL 语句称作参数化 SQL 语句。

使用 SqlDataSource 控件时,可以指定使用参数的 SQL 查询和语句。通过根据运行时计算的值读写数据库信息,这有助于提升数据绑定环境的灵活性。可以从各种源获取参数值。这些源包括 ASP.NET 应用程序变量、用户标识和用户选择的值。可以使用参数执行下列操作:提供用于数据检索的搜索条件;提供要在数据存储区中插入、更新或删除的值;提供用于排序、分页和筛选的值。

一、使用参数

同所有的数据源控件一样,SqlDataSource 控件在运行时接受输入参数,并在参数集合中对参数进行管理。每一项数据操作都有一个相关的参数集合。对于选择操作,可以使用 SelectParameters 集合;对于更新操作,可以使用 UpdateParameters 集合,依此类推。

可以为每个参数指定名称、类型、方向和默认值。对于从特定对象(例如,控件、会话变量或用户配置文件)获取值的参数,需要设置其他属性。例如,ControlParameter 要求设置 ControlID 以标识要从中获取参数值的控件,以及设置 PropertyName 属性以指定包含参数值的属性。

另外,SqlDataSource 控件将基于支持自动更新、插入和删除操作的数据绑定控件(例如 GridView FormView 控件)所传递的值自动创建参数。

二、在命令中指定参数

使用 SqlDataSource 控件时,可以将该控件的命令属性设置为参数化 SQL 语句或存储过程的名称。如果指定命令的存储过程,必须将该命令的命令类型指定为 StoredProcedure

2.1、参数名称

SqlDataSource 控件可以将 ParameterPrefix 属性的值添加到所有参数名称的开头。(默认的前缀为“@”。)

如果 GridView 控件等数据绑定控件绑定到 SqlDataSource 控件,在执行更新或删除操作期间,该数据绑定控件会同时将当前记录值和原始记录值传递到 SqlDataSource 控件。当前值传递到 Values 字典中。原始值传递到 Keys OldValues 字典中。对于给定的数据操作,这些字典的内容将会追加到基础 DbCommand 对象的 Parameters 集合中。

SqlDataSource 控件的 SQL 命令中,使用命名约定使参数占位符与传递到该命令的原来的值相匹配。通过设置 SqlDataSource 控件的 OldValuesParameterFormatString 属性,可以建立该占位符名称的格式。将 OldValuesParameterFormatString 属性设置为一个字符串。该字符串包含的“{0}”是该字段名称的占位符。例如,如果将 OldValuesParameterFormatString 属性设置为“old_{0}”,原始值参数的名称将会解析为前缀为“@old_”的字段名称。考虑对名为 LastModifiedDate 的字段执行更新操作。该字段的当前值传递到 Values 字典中,而该字段的原始值传递到 OldValues 字典中。此时,将会创建名为 @LastModifiedDate 参数,用来传递当前值,同时会创建名为 @old_LastModifiedDate 参数,用来传递原始值。此后,可以将这两个参数都包括在 SQL 语句中,以便区别该字段的当前值和原始值,如以下示例所示:

UPDATE Table1 SET LastModifiedDate = @LastModifiedDate

WHERE Key = @Key AND LastModifiedDate = @old_LastModifiedDate

执行开放式并发检查或使用可以修改主键的数据源时,必须可以分隔命令中的当前值和原始值。

2.2、对 SqlClient 提供程序使用参数

默认情况下,SqlDataSource 控件通过 System.Data.SqlClient 数据提供程序将 SQL Server 用作数据源。System.Data.SqlClient 提供程序支持作为占位符的命名参数,如以下示例所示:

SELECT * FROM Employees WHERE LastName = @LastName

AND FirstName = @FirstName

使用命名参数,在命令的参数集合中指定参数的顺序并不重要。但是,必须确保在 SQL 命令中使用的参数名称与相关集合中的参数名称相对应。

下面的示例演示如何将 SQL 命令中的命名参数用于使用 System.Data.SqlClient 提供程序的 SqlDataSource 控件。

<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"

SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"

InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);

SELECT @EmpID = SCOPE_IDENTITY()"

UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName

WHERE EmployeeID=@EmployeeID"

DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"

ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"

OnInserted="EmployeeDetailsSqlDataSource_OnInserted"

RunAt="server">

<SelectParameters>

<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />

</SelectParameters>

<InsertParameters>

<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />

</InsertParameters>

</asp:sqlDataSource>

2.3、对 OleDb Odbc 提供程序使用参数

如果要连接到 OLE 数据库或 ODBC 数据源,可以对 SqlDataSource 控件进行配置,使其通过 System.Data.OleDb System.Data.Odbc 提供程序分别使用数据源。System.Data.OleDb System.Data.Odbc 提供程序只支持由“?”字符标识的定位参数,如以下示例所示:

SELECT * FROM Employees WHERE LastName = ? AND FirstName = ?

System.Data.OleDb System.Data.Odbc 提供程序与参数化 SQL 语句结合使用时,参数占位符的指定顺序必须与相关参数集合中的参数顺序匹配。可以控制参数的顺序,方法是在执行相关数据操作的集合(如相关 UpdateCommand UpdateParameters 集合)中显式指定这些参数。为通过数据绑定控件传递的值自动创建的参数显式创建参数集合时,显式创建的参数将会改写自动生成的所有参数。这样,可以确保参数按照所需的顺序进行传递。如果调用了可返回值的存储过程,则必须将 Direction 值为 ReturnValue 的参数指定为命令参数集合中的第一个参数。

说明: 默认情况下,数据绑定控件中基于绑定字段的参数将按照下列顺序从参数字典添加到命令中:ValuesKeys OldValues。对于删除操作,只使用 Keys 字典。对于插入操作,只使用 Values 字典。

下面的示例演示如何为使用 System.Data.OleDb 提供程序的 SqlDataSource 控件指定参数。为了确保集合中的参数顺序与 SQL 语句中占位符的顺序匹配,可以显式指定这些参数。

<Fields>

<asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" InsertVisible="False" ReadOnly="true"/>

<asp:BoundField DataField="FirstName" HeaderText="First Name"/>

<asp:BoundField DataField="LastName" HeaderText="Last Name"/>

<asp:TemplateField HeaderText="Birth Date">

<ItemTemplate>

<asp:Label ID="BirthDateLabel" Runat="Server"

Text='<%# Eval("BirthDate", "{0:d}") %>' />

</ItemTemplate>

<InsertItemTemplate>

<asp:Calendar ID="InsertBirthDateCalendar" Runat="Server"

SelectedDate='<%# Bind("BirthDate") %>' />

</InsertItemTemplate>

<EditItemTemplate>

<asp:Calendar ID="EditBirthDateCalendar" Runat="Server"

VisibleDate='<%# Eval("BirthDate") %>'

SelectedDate='<%# Bind("BirthDate") %>' />

</EditItemTemplate>

</asp:TemplateField>

</Fields>

分享到:
评论

相关推荐

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据(源码)

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据(源码)

    asp.net数据源控件与数据库绑定控件

    asp.net 数据源控件与数据库绑定控件 Asp.net 数据源控件是 Asp.net 框架中的一种重要组件,用于将数据绑定到 Web 应用程序中。数据源控件可以与数据库进行交互,获取数据,并将其绑定到数据绑定控件中,以实现数据...

    asp.net常用Web服务器控件

    4.1 使用控件显示文本 实例 显示密码格式文本 实例 显示长日期格式时间 实例 显示金额格式文本 4.2 使用控件显示图片 实例 显示验证码图片 实例 动态显示用户头像 实例 使用网页对话框显示图片 实例 实现上传图片 ...

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据

    在ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据

    ASP.NET 控件的使用

    9.3 在SqlDataSource控件中使用ASP.NET参数 271 9.3.1 使用ASP.NET参数对象 272 9.3.2 使用ASP.NET的Control-Parameter对象 274 9.3.3 使用ASP.NET的Cookie-Parameter对象 277 9.3.4 使用ASP.NET的Form-Parameter...

    ASP.NET.4揭秘

    9.3 在sqldatasource控件中使用asp.net参数308 9.3.1 使用asp.net参数对象308 9.3.2 使用asp.net的controlparameter对象311 9.3.3 使用asp.net的cookieparameter对象315 9.3.4 使用asp.net的formparameter对象317 ...

    《零基础学ASP.NET 2.0》第14章 数据源控件访问数据库

    14.1.1 使用SqlDataSource 数据源控件 246 14.1.2 参数声明 248 ...14.5.2 使用参数执行数据更新 261 14.6 常见问题 265 14.6.1 如何选择合适的数据源控件 265 14.6.2 如何访问一个带密码的Access数据库 265

    在ASP.NET 2.0中操作数据之四十八:对SqlDataSource控件使用开放式并发

    本文主要讲解ASP.NET 2.0中SqlDataSource控件通过配合SQL语句达到控制开放式并发的目的,通过在UPDATE和DELETE语句里扩展WHERE字句,SqlDataSource能应对绝大部分情况。

    asp.net知识库

    使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 Ibatisnet 提供的CacheModel ASP.NET 2.0中小心Profile命名冲突 使用ASP.NET 2.0 Profile存储用户信息[翻译] Level ...

    零基础学ASP.NET 2.0电子书&源代码绝对完整版1

    示例描述:本章演示ASP.NET 2.0网站的预编译以及学习ASP.NET 2.0的前置知识。 WebSite文件夹 创建的ASP.NET 2.0 Web站点。 www文件夹 第一个用C#开发的Web应用程序。 bianyi.bat 编译网站的批处理文件。 ...

    ASP.NET3.5控件详解

    VS2008中实际项目中用到的各种控件,包括ASP.NET3.5的大部分控件的使用方法和技巧,各种控件属性以及各种控件方法应用大全。 包括各种基本控件,各种验证控件,各种列表控件,SqlDataSource控件,ObjectDataSource...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    7.3.7 使用参数化命令 7.3.8 调用存储过程 7.4 事务 7.4.1 事务和ASP.NET应用程序 7.4.2 隔离级别 7.4.3 保存点 7.5 提供程序无关的代码 7.5.1 创建工厂 7.5.2 用工厂创建对象 7.5.3 使用提供...

    asp.net教学讲义

    11.2.3 使用参数 174 第十二章:用户控件和自定义控件 176 12.1 用户控件和自定义控件概述 176 12.2 什么时候使用用户控件 176 12.3 创建用户控件 176 12.4 创建自定义控件 178 第十三章:配置和错误处理 184 13.1 ...

    ASP.NET 3.5 开发大全11-15

    11.4.3 ASP.NET登录控件的使用 11.5 自定义控件实例 11.5.1 ASP.NET分页控件 11.5.2 ASP.NET分页控件的使用 11.6 小结 第12章 ASP.NET的皮肤、主题和母版页 12.1 皮肤和主题 12.1.1 CSS简介 12.1.2 CSS基础 12.1.3 ...

    ASP.NET 3.5 开发大全1-5

    11.4.3 ASP.NET登录控件的使用 11.5 自定义控件实例 11.5.1 ASP.NET分页控件 11.5.2 ASP.NET分页控件的使用 11.6 小结 第12章 ASP.NET的皮肤、主题和母版页 12.1 皮肤和主题 12.1.1 CSS简介 12.1.2 CSS基础 12.1.3 ...

    ASP.NET教学讲义,完整章节

    第一章:asp.net和web窗体 4 1.1 NET应用开发架构简介 4 1.2 Web 窗体与ASP.NET页面 7 1.3 ASP.NET 页的结构 11 1.4 Page事件(页面事件) 16 1.2.2 处理回送 20 1.2.3 ASP.NET应用程序示例 23 第二章:WEB服务器...

    ASP.NET三层架构

    走过Asp.net学习入门阶段后,真正开始着手开发一个Web项目时,才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的,而恰恰是被忽视了的一个ObjectDataSource数据源控件才...

    asp.net组合查询控件

    对sqldatasource和GRIDVIEW进行组合查询控件,能根据Gridview表头生成查询,绑定GRIDVIEW

    asp.net2.0

    导言 创建一个数据访问层 创建一个业务逻辑层 母板页和站点导航 基本报表 使用ObjectDataSource展现数据 ...48 在SqlDataSource中使用参数化查询(Reeezak) 49 使用SqlDataSource插入、更新以及删除数据(Reeezak

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    第3章 ASP.NET 2.0常用服务器控件 3.1 使用基本控件 3.1.1 TextBox控件的应用 3.1.2 Label控件的应用 3.1.3 DropDownList和ListBox控件应用 3.1.4 CheckBOX和CheckBoxList控件应用 3.1.5 RadioButton和...

Global site tag (gtag.js) - Google Analytics