在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
通过 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对象。 2.一些常用的属性 这些属性不光可以在程序代码中进行设定,也可以在画面中像使用控件方式一样进行设定。
<!-- 连接字符串直接写入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;
<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属性 2.6 ASP.NET参数对象属性 如果 GridView 控件等数据绑定控件绑定到 SqlDataSource 控件,在执行更新或删除操作期间,该数据绑定控件会同时将当前记录值和原始记录值传递到 SqlDataSource 控件。当前值传递到 Values 字典中。原始值传递到 Keys 或 OldValues 字典中。对于给定的数据操作,这些字典的内容将会追加到基础 DbCommand 对象的 Parameters 集合中。 更具体的详见以下MSDN说明: 2.7 缓存属性EnableCaching与CacheDuration 当 EnableCaching 属性设置为 true 且 CacheDuration 属性设置为一个大于 0 的值(该值指示在放弃缓存项之前,缓存存储数据的秒数)时,SqlDataSource 控件将自动缓存数据。值 0 表示无限期缓存。 缓存的行为取决于持续时间和 CacheExpirationPolicy 属性的组合。如果 CacheExpirationPolicy 属性设置为 Absolute 值,则 SqlDataSource 将缓存第一次数据检索操作的数据,并将其保留在内存中一段时间,这段时间最长为 CacheDuration 属性所指定的时间量。如果需要内存,可以在持续时间结束前释放数据。然后,缓存在下一操作期间被刷新。如果 CacheExpirationPolicy 属性设置为 Sliding 值,数据源控件将缓存第一次数据检索操作的数据,但是对于后面的每个操作,它都重置保留缓存的时间窗口。自上次 Select 操作以后,如果在等于 CacheDuration 值的时间段内没有任何活动,缓存将过期。 仅当 SqlDataSource 控件处于 DataSet 模式时,它才可缓存数据。如果 SqlDataSource 控件设置为 DataReader 值并且启用了缓存,则 Select 方法将引发 NotSupportedException 异常。 3. 详叙sqlDataSource中的ASP.NET参数对象 对于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
<!--从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>
<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,是在后台代码中定义的一个属性。
1private void Page_Load(object sender, System.EventArgs e) 2} 3.2 CookieParameter对象
<script runat=”server”> void Page_Load() { if (Request.Cookies[“VoterId”] == null) { // 创建VoterId Cookie对象 string identifier = Guid.NewGuid().ToString(); HttpCookie voteCookie = new HttpCookie(“VoterId”, identifier); voteCookie.Expires = DateTime.MaxValue; Response.AppendCookie(voteCookie); } } </script> <asp:FormView id=”frmVote” DataSourceID=”srcVote” DefaultMode=”Insert” Runat=”server”> <InsertItemTemplate> <asp:Label id=”lblFavoriteColor” AssociatedControlID=”rdlFavoriteColor” Runat=”server” /> <asp:RadioButtonList id=”rdlFavoriteColor” SelectedValue=’<%#Bind(“Color”)%>' Runat=”server”> <asp:ListItem Value=”Red” Text=”Red” Selected=”True” /> <asp:ListItem Value=”Blue” Text=”Blue” /> <asp:ListItem Value=”Green” Text=”Green” /> </asp:RadioButtonList> <asp:Button id=”btnSubmit” Text=”Submit” CommandName=”Insert” Runat=”server” /> </InsertItemTemplate> </asp:FormView> <asp:SqlDataSource id=”srcVote” SelectCommand=”SELECT * FROM Vote ORDER BY Id DESC” InsertCommand=”INSERT Vote (VoterId,Color) VALUES (@VoterId,@Color)” <!--Color参数从FormView中得到,VoterId参数从Cookie中得到--> ConnectionString=”<%$ ConnectionStrings:Vote %>” Runat=”server”> <InsertParameters> <asp:CookieParameter Name=”VoterId” CookieName=”VoterId” /> </InsertParameters> </asp:SqlDataSource> 3.3 FormParameter对象
<script runat=”server”> void Page_Load() { // 如果是点击了AddMove按钮 if (Request.Form[“AddMovie”] != null) srcMovies.Insert(); // 触发sqlDatasource的Insert事件 } </script> <body> <form action=”ShowFormParameter.aspx” method=”post”> <!-- 需要提交的表单 --> <label for=”txtTitle”>Movie Title:</label> <input name=”txtTitle” /> <br /> <label for=”txtDirector”>Movie Director:</label> <input name=”txtDirector” /> <br /> <input name=”AddMovie” type=”submit” value=”Add Movie” /> </form> <form id=”form1” runat=”server”> <!--服务器Form控件 --> <asp:GridView id=”grdMovies” DataSourceID=”srcMovies” Runat=”server” /> <!--GirdView控件,显示数据 --> <asp:SqlDataSource id=”srcMovies” SelectCommand=”SELECT * FROM Movies” InsertCommand=”INSERT Movies (Title,Director,CategoryId,DateReleased) VALUES (@Title,@Director,0,’12/25/1966’)” ConnectionString=”<%$ ConnectionStrings:Movies %>” Runat=”server”> <InsertParameters> <asp:FormParameter Name=”Title” FormField=”txtTitle” DefaultValue=”Untitled” /> <asp:FormParameter Name=”Director” FormField=”txtDirector” DefaultValue=”Allen Smithee” /> </InsertParameters> </asp:SqlDataSource> </form> </body> ProfileParameter对象可以用来提取web.config中的Profile属性,ProfileParameter除包含Parameter基类的所有属性外,还具备以下属性: ● ProfileName: Profile属性的名称 例6:如何使用ProfileParameter对象
<!-- web.config配置 --> <system.web> <profile enabled=”true”> <properties> <add name=”DisplayName” defaultValue=”Anonymous” /> </properties> </profile> </system.web>
<!-- aspx处理页面 –> <!-- 留言版的输入框 --> <asp:FormView id=”frmGuestBook” DataSourceID=”srcGuestBook” DefaultMode=”Insert” Runat=”server”> <InsertItemTemplate> <asp:Label id=”lblComments” Text=”Enter Your Comments:” Runat=”server” /> <br /> <asp:TextBox id=”txtComments” Text=’<%# Bind(“Comments”) %>' TextMode=”MultiLine” Columns=”50” Rows=”4” Runat=”server” /> <br /> <asp:Button id=”btnInsert” Text=”Add Comments” CommandName=”Insert” Runat=”server” /> </InsertItemTemplate> </asp:FormView> <!-- SqlDataSource处理 --> <asp:SqlDataSource id=”srcGuestBook” SelectCommand=”SELECT Name,Comments,EntryDate FROM GuestBook ORDER BY Id DESC” InsertCommand=”INSERT GuestBook (Name,Comments) VALUES (@Name,@Comments)” ConnectionString=”<%$ ConnectionStrings:GuestBook %>” Runat=”server”> <InsertParameters> <asp:ProfileParameter Name=”Name” PropertyName=”DisplayName” /> </InsertParameters> </asp:SqlDataSource> 3.5 QueryStringParameter对象 QueryStringParameter对象可以表示传递给页面的任何查询字符串,QueryStringParameter除包含Parameter基类的所有属性外,还具备以下属性: ● QueryStringField: 所表示查询字符串的名称 例7:如何使用QueryStringField对象
<!-- 链接页面 --> <asp:GridView id=”grdMovies” DataSourceId=”srcMovies” AutoGenerateColumns=”false” ShowHeader=”false” Runat=”server”> <Columns> <asp:HyperLinkField DataTextField=”Title” DataNavigateUrlFields=”Id” DataNavigateUrlFormatString=”ShowQueryStringParameterDetails.aspx?id={0}” /> </Columns> </asp:GridView> <asp:SqlDataSource id=”srcMovies” SelectCommand=”SELECT * FROM Movies” ConnectionString=”<%$ ConnectionStrings:Movies %>” Runat=”server” />
<!-- 链接后的处理页面 --> <asp:SqlDataSource id=”srcMovie” SelectCommand=”SELECT * FROM Movies WHERE Id=@Id” |
请发表评论