通过 SqlDataSource 控件,可以使用 Web 服务器控件访问位于关系数据库中的数据。其中可以包括 Microsoft SQL Server 和 Oracle 数据库以及 OLE DB 和 ODBC 数据源。您可以将 SqlDataSource 控件与数据绑定控件(如 GridView、FormView 和 DetailsView 控件)一起使用,用极少代码或甚至不用代码来在 ASP.NET 网页上显示和操作数据。

1. 总述

SqlDataSource是基于ADO.net构建的,会使用ADO.NET中的DataSet、DataReader和Command对象,我们看不见它们只不过是被封装起来了。SqlDataSource是一个控件,所以允许以声明控件的方式,而不是编程的方式使用这些ADO.NET对象。
   SqlDataSource需要与其它数据绑定控件结合起来,以显示数据。关于数据绑定控件,见http://www.cnblogs.com/shipfi/archive/2009/10/15/1584054.html

2.一些常用的属性

这些属性不光可以在程序代码中进行设定,也可以在画面中像使用控件方式一样进行设定。
   2.1 ConnectionString属性 : 获取或设置特定于 ADO.NET 提供程序的连接字符串
       如果是控件形式,可以在aspx页面中进行设定,代码如下:

<!-- 连接字符串直接写入ConnectionString属性中 -->
<asp:SqlDataSource ID="srcMovies" runat="server"
           ConnectionString="Data Source=PC-200907130922;Initial Catalog=DawnEnterpriseDB;User ID=sa;Password=****" >
<!-- 连接字符串直接在web.config中 -->
<asp:SqlDataSource ID="srcMovies" runat="server"
           ConnectionString="<%$ ConnectionStrings:DawnEnterpriseDBConnectionString %>" >

如果是编程方式,在aspx.cs中,代码如下:

SqlDataSource srcMov = new SqlDataSource();
srcMov.ConnectionString =
     WebConfigurationManager.ConnectionStrings["DawnEnterpriseDBConnectionString"].ConnectionString;

2.2 ProviderName属性:获取或设置 .NET Framework 数据提供程序的名称,使用该提供程序来连接基础数据源。
        如果不进行设定,默认的为 Microsoft SQL Server 的 ADO.NET 提供程序的名称。
        可以设定的值有:"System.Data.SqlClient"、"System.Data.OleDb"、"System.Data.Odbc"、"System.Data.OracleClient"
        MSDN上记载:如果更改 ProviderName 属性,会引发 DataSourceChanged 事件,从而导致所有绑定到 SqlDataSource 的控件重新进行绑定。

2.3 执行四个SQL语句的Command及相应的CommandType
       ●SelectCommand、InsertCommand、UpdateCommand、DeleteCommand
       以上四个属性都是String类型,可以提供SQL语句及存储过程名称。
       如果是提供的存储过程,则需要把相应的SelectCommandType,InsertCommandType,UpdateCommandType,DeleteCommandType设定为"StoredProcedure"

2.4 进行过滤的FilterExpression属性
       设定FilterExpression属性,可以过滤控件返回的行,例如:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
         ConnectionString="<%$ ConnectionStrings:DawnEnterpriseDBConnectionString %>" 
         SelectCommand="SELECT [product_id], [product_code], [product_name] FROM [product_main]”
         FilterExpression=”Product_name like ‘{0}%’ ”
         Runat=”server”>
         <FilterParameters>
               <asp:ControlParameter Name=”Title” ControlID=”txtTitle” />
         </FilterParameters>
</asp:SqlDataSource>

2.5 改变数据源模型DataSourceMode属性
         可以改变数据源模型有:"DataReader",”DataSet”,默认是DataSet.相比DataSet,DataReader可以更快速,但是,只有DataSet提供了缓存、过滤、分页和排序功能

2.6 ASP.NET参数对象属性
         通常,SQL 语句和存储过程包括运行时计算的参数。使用参数编写的 SQL 语句称作参数化 SQL 语句
         ASP.NET 数据源控件可以接受输入参数,这样就可以在运行时将值传递给这些参数。
         参数值可以从多种源中获取。通过 Parameter 对象,可以从 Web 服务器控件属性、Cookie、会话状态、QueryString 字段、用户配置文件属性及其他源中为参数化数据操作提供值。
         相应的参数对象包括:
          ● Parameter:表示任意一个静态值
          ● ControlParameter:表示控件值或页面的属性值
          ● CookieParameter:表示浏览器的Cookie值
          ● FormParameter:表示一个HTML表单字段的值
          ● ProfileParameter:表示一个配置文件属性值
          ● QueryStringParameter:表示一个查询字符串字段中的值
          ● SessionParameter:表示一个存储在会话状态中的值
         以上参数对象也具有相关属性,包括ConvertEmptyStringToNull、DefaultValue、Direction、Name、Size、Type。参数对象可以显式的声明,对于GridView、DetailsView数据绑定控件,无需显式的声明参数,原因是因为以下这句话的说明:

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

更具体的详见以下MSDN说明:
          ●对 SqlDataSource 控件使用参数:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vwdcon/html/403ff44a-dd0b-484d-968e-dcd1dcd4c295.htm
          ●对数据源控件使用参数: ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vwdcon/html/88622d04-2989-484e-93fe-594cd98dcf5f.htm
          ●数据源控件如何为数据绑定字段创建参数:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vwdcon/html/aa3f28c5-fd99-4978-8a66-c7709e0816c4.htm

2.7 缓存属性EnableCaching与CacheDuration
        
EnableCaching属性表示是否需要缓冲,CacheDuration表示缓存的失效时间。更多的缓存说明,会另外进行讲述。
          以下是MSDN中对于缓存的说明:

    当 EnableCaching 属性设置为 true 且 CacheDuration 属性设置为一个大于 0 的值(该值指示在放弃缓存项之前,缓存存储数据的秒数)时,SqlDataSource 控件将自动缓存数据。值 0 表示无限期缓存。

缓存的行为取决于持续时间和 CacheExpirationPolicy 属性的组合。如果 CacheExpirationPolicy 属性设置为 Absolute 值,则 SqlDataSource 将缓存第一次数据检索操作的数据,并将其保留在内存中一段时间,这段时间最长为 CacheDuration 属性所指定的时间量。如果需要内存,可以在持续时间结束前释放数据。然后,缓存在下一操作期间被刷新。如果 CacheExpirationPolicy 属性设置为 Sliding 值,数据源控件将缓存第一次数据检索操作的数据,但是对于后面的每个操作,它都重置保留缓存的时间窗口。自上次 Select 操作以后,如果在等于 CacheDuration 值的时间段内没有任何活动,缓存将过期。

仅当 SqlDataSource 控件处于 DataSet 模式时,它才可缓存数据。如果 SqlDataSource 控件设置为 DataReader 值并且启用了缓存,则 Select 方法将引发 NotSupportedException 异常。

更多的MSDN说明,请参见:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fxref_system.web/html/5bfd5e37-43e6-8dca-4323-8454d465bd0b.htm

3. 详叙sqlDataSource中的ASP.NET参数对象

本段落是对2.6节探讨的ASP.NET参数对象的扩充说明,在2.6节说过,参数对象有Parameter、ControlParameter、CookieParameter…
    这些asp.net参数对象有以下共通属性:
     ● ConvertEmptyStringToNull : 当值为真时,如果参数接受一个空字符,空字符被转换为NULL
     ● DefaultValue : 参数默认值
     ● Direction : 参数方向,可以为INPUT、OUTPUT、InputOutput、ReturnValue
     ● Name : 参数名称
     ● Size : 参数数据大小
     ● Type : 参数类型,可以为TypeCode枚举值

3.1 ControlParameter对象
         ControlParmeter对象可以表示一个控件的属性值。可以表示任意一个与SqlDataSource控件位于同一页面的控件的值
         除了具备父类Parameter所有的属性外,还具备以下属性:
           ● ControlID : 控件ID
           ● PropertyName : 获取或设置由ControlParameter 对象绑定到的ControlID 属性标识的控件的属性名

   对于PropertyName, 这里说明一下,假设需要从一个DropdownList1控件获得参数,关于DropdownList会有两个值,一是SelectedText,一是 SelectValue.那是想要取参数时取DropdownList1.SelectedText值呢,还是 DropdownList1.SelectValue值?PropertyName就是设置控件的相应属性值,从控件的哪个属性里取参数。对于 DropdownList控件,它的属性还比较少。如果对于GridView控件,它的属性就很多啦,包括PageIndex,Rows等等都可以作为参数来提取。Understand?
   另外,对于PropertyName值并不必须要设定,如果不设定,控件参数对象会自动查找ControlVlaueProperty属性装饰的属性。 DropdownList控件的这个属性就是SelectedValue。关于这点,请参考:
   ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fxref_system.web/html/f8be313f-8426-a7e7-904a-5a70cc816410.htm

例1:设置ControlParameter参数

<!--从DropdownList控件中提取参数-->
<asp:DropDownList id=”ddlMovies”
DataSourceID=”srcMovies” DataTextField=”Title” DataValueField=”Id” Runat=”server” />

<asp:SqlDataSource id=”srcMovieDetails”
SelectCommand=”SELECT * FROM Movies WHERE Id=@Id”
ConnectionString=”<%$ ConnectionStrings:Movies %>” Runat=”server”>
     <SelectParameters>
         <asp:ControlParameter Name=”Id” ControlID=”ddlMovies” PropertyName=”SelectedValue” />
     </SelectParameters>
</asp:SqlDataSource>

还有一种方法,就是参数想取得cs代码类中相应变量作为参数的值,是否可以?其实,作为cs中的类,是继承自System.Web.UI.Page的对象,而Page类又是自Control类继承,所以可以使用ControlParameter对象来表示Page属性的值
例2:从Page对象属性中取得相应ControlParameter对象

<script runat=”server”>
public string IPAddress
{
     get { return Request.UserHostAddress; }
}
</script>

<asp:SqlDataSource id=”srcGuestBook”
    SelectCommand=”SELECT * FROM GuestBook ORDER BY Id DESC”
    InsertCommand=”INSERT GuestBook (IPAddress,Name,Comments)
    VALUES (@IPAddress,@Name,  ConnectionString=”<%$ ConnectionStrings:GuestBook %>”
    Runat=”server”>
<InsertParameters>
    <asp:ControlParameter Name=”IPAddress” ControlID=”__page”   PropertyName=”IPAddress” />
</InsertParameters>
</asp:SqlDataSource>

以上,表示本页Page的控件对象ID是__page,这个值是Page类自动生的的ID。PropertyName的值为IPAddress,是在后台代码中定义的一个属性。

例3:动态在代码中加入ControlParmeter对象

1private void Page_Load(object sender, System.EventArgs e)
2{
3        SqlDataSource sqlSource = new SqlDataSource(
4          ConfigurationManager.ConnectionStrings["MyNorthwind"].ConnectionString,
5          "SELECT FirstName, LastName FROM Employees WHERE Country = @country;");
6
7        ControlParameter country = new ControlParameter();
8        country.Name = "country";
9        country.Type = TypeCode.String;
10        country.ControlID = "DropDownList1";
11        country.PropertyName = "SelectedValue";
12
13        // If the DefaultValue is not set, the DataGrid does not
14        // display anything on the first page load. This is because
15        // on the first page load, the DropDownList has no
16        // selected item, and the ControlParameter evaluates to
17        // String.Empty.
18        country.DefaultValue = "USA";
19
20        sqlSource.SelectParameters.Add(country);
21
22        // Add the SqlDataSource to the page controls collection.
23        Page.Controls.Add(sqlSource);
24
25        DataGrid1.DataSource = sqlSource;
26        DataGrid1.DataBind();
27}

asp.net学习之SqlDataSource 1 select的四种参数赋予形式的解释相关推荐

  1. asp.net学习之SqlDataSource 2 select的四种参数赋予形式的解释

    通过 SqlDataSource 控件,可以使用 Web 服务器控件访问位于关系数据库中的数据.其中可以包括 Microsoft SQL Server 和 Oracle 数据库以及 OLE DB 和 ...

  2. TensorFlow学习笔记(二十三)四种Cross Entropy交叉熵算法实现和应用

    交叉熵(Cross-Entropy) 交叉熵是一个在ML领域经常会被提到的名词.在这篇文章里将对这个概念进行详细的分析. 1.什么是信息量? 假设是一个离散型随机变量,其取值集合为,概率分布函数为 p ...

  3. Spark中组件Mllib的学习16之分布式行矩阵的四种形式

    来源:http://blog.csdn.net/xubo245/article/details/51483995 更多代码请见:https://github.com/xubo245/SparkLear ...

  4. Docker学习总结(48)——Docker 四种网络模式温故

    一.closed container 封闭式网络模式 相当于一座孤岛,没有网络协议栈的通信 使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器 ...

  5. js学习总结----js中常用的四种输出方式

    1.alert('内容') 在浏览器中弹出框显示我们的内容    不输入内容弹出undefined  (注意alert弹出的都是字符串) 2.document.write('内容')  在页面中输出显 ...

  6. 5000字学习C语言错误处理的四种方式。

    C错误处理 在C语言中,错误处理是一个非常重要的主题.通常情况下,程序员需要在代码中处理错误,以保证程序能够在出现错误时正确地处理这些情况. C语言中常见的错误类型包括:语法错误.逻辑错误.运行时错误 ...

  7. 【DSP数字信号处理学习笔记】—— 线性相位的四种类型的推演以及来龙去脉

    我们知道线性相位就是相位是一次函数的关系,当然这里面还细分成了严格的线性相位和非严格的线性相位.那么他们究竟是怎么来的呢?我们今天来推导一下,同时,我们将会给出一种如何用时域信号通过对称性的关系计算除 ...

  8. ASP,php,jsp,ASP.net四种web平台语言的区别与前景

    ASP,PHP,JSP,ASP.NET 这是当前比较流行的四种WEB网站编程语言 现在做网站大部分都是使用这几种语言中的其一 ASP是基于WINDOWS平台的,简单易用,由于是运行在WINDOWS平台 ...

  9. asp.net学习之再论sqlDataSource

    asp.net学习之再论sqlDataSource 原文:asp.net学习之再论sqlDataSource 本节从上一节没有阐述的几个方面,再讨论一下SqlDataSource的用法及注意的事项. ...

最新文章

  1. 【1024】不整虚的,红包以备,致敬一线同僚!
  2. HTML 5 input type 属性
  3. 天天用 Spring,bean 实例化原理你懂吗?
  4. python网址在浏览器能打开_Python - Flask - 在默认浏览器中打开一个网页
  5. CONCAT 联合查询
  6. 河南大学计算机组成原理,河南大学计算机组成原理考点
  7. mysql rpm 安装多实例_MySQL搭建系列之多实例
  8. CF1062E Company
  9. java table 数据绑定,ireport5.6使用table组件,如何用table显示javaBean数据源
  10. windows下的C++与cuda编译器位置
  11. 错误集合_20220131
  12. python可以神奇的做什么_可以用 Python 编程语言做哪些神奇好玩的事情?
  13. 李宏毅机器学习课程---1、机器学习介绍
  14. 手机java jdk环境配置文件_JDK怎么安装与配置环境变量
  15. 江苏计算机专业接本,江苏农牧科技职业学院专接本或专转本的通知
  16. 拿大厂机器学习岗offer,吐血整理的面试秘籍!
  17. SBIO | 浙大马忠华团队综述染色质重塑复合体SWI/SNF在植物-病原体互作中的作用...
  18. 工程项目管理组织机构形式
  19. 《东周列国志》第八十六回 吴起杀妻求将 驺忌鼓琴取相
  20. python函数编程1+(1+2)_《Python游戏编程快速上手》一2.1 一些简单的数学知识

热门文章

  1. atitit.设计文档---操作日志的实现
  2. 调整自己--提升自己
  3. DevOps实战 —— 如何高效地远程部署?自动化运维利器 Fabric 教程
  4. Nginx并发数、每秒连接数、下载速度限制,防攻击杀手锏
  5. Oracle 12C DataGuard部署以及维护
  6. CentOS上快速安装Oracle服务器脚本
  7. ZooKeeper管理员指南
  8. 【Day08】请简述虚拟 DOM 中 Key 的作用和好处
  9. 【C语言】创建一个函数,判断某一正整数是否为完数,并调用这个函数找出1000以内所有完数...
  10. GoLang MySQL CRUD Example