asp.net学习之SqlDataSource 1 select的四种参数赋予形式的解释
来源:互联网 发布:织梦视频网站源码 编辑:程序博客网 时间:2024/05/29 17:01
通过 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页面中进行设定,代码如下:
<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中,代码如下:
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属性,可以过滤控件返回的行,例如:
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数据绑定控件,无需显式的声明参数,原因是因为以下这句话的说明:
更具体的详见以下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中对于缓存的说明:
缓存的行为取决于持续时间和 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值并不必须要设定,如果不设定,控件参数对象会自动查找ControlVlaueProperty属性装饰的属性。 DropdownList控件的这个属性就是SelectedValue。关于这点,请参考:
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fxref_system.web/html/f8be313f-8426-a7e7-904a-5a70cc816410.htm
例1:设置ControlParameter参数
<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对象
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对象
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的四种参数赋予形式的解释
- asp.net学习之SqlDataSource 2 select的四种参数赋予形式的解释
- asp.net学习之再论sqlDataSource 1
- .NET学习(四)数据源控件SqlDataSource的使用
- ASP.NET: SqlDataSource控件的缓存机制
- Asp.net 2.0 SqlDataSource的高级应用
- asp.net学习之再论sqlDataSource 2
- sqldatasource中select的应用
- ASP.NET - 对 SqlDataSource 控件使用参数
- ASP.NET sqldatasource DROPDOWNLIST 参数查询
- Scott Mitchell 的ASP.NET 2.0数据教程之四十七使用SqlDataSource控件检索数据
- Scott Mitchell 的ASP.NET 2.0数据教程之48 使用SqlDataSource控件查询数据
- Scott Mitchell 的ASP.NET 2.0数据教程之50:对SqlDataSource控件使用开放式并发
- Scott Mitchell 的ASP.NET 2.0数据教程之四十七使用SqlDataSource控件检索数据
- Scott Mitchell 的ASP.NET 2.0数据教程之四十八 使用SqlDataSource控件查询数据
- 四种参数传递的形式
- Asp.net 2.0 使用SqlDataSource的一点心得
- asp.net 2.0中得到sqldatasource返回的行数
- 用HttpClient来模拟浏览器GET POST
- Myeclipse+tomcat+oracle10g环境搭建
- 大洋蛋...补偿第七天...倒数322
- mysql笔记2(基准测试及性能分析)
- C#中dataGridView1控件数值显示效果
- asp.net学习之SqlDataSource 1 select的四种参数赋予形式的解释
- 大洋蛋...补偿第八天...倒数321
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- drools介绍
- JDK6.0自带web service
- 对liageren网站的建议
- 大洋蛋...补偿第九天...倒数320
- 动态编译JAVA程序
- 命令行下,Postgre的一些基本操作