- 连接表示与某些数据存储区(如 SQL Server 或 XML 文件)的物理连接。
- 命令表示从数据存储区检索(选择)或对数据存储区进行操作(插入、更新、删除)的指令。
- 数据集表示应用程序使用的实际数据。注意,数据集总是同它们的源连接和数据模型断开并可独立
修改。不过,数据集的更改可以很容易与起始数据模型相协调。
使用数据集的好处是它为您提供了断开连接的数据库视图。可以在应用程序中操作数据集,然后在以后协
调更改和实际的数据库。对于长期运行的应用程序,这通常是最好的方法。对于 Web 应用程序,通常对
每个请求执行短操作(一般只是显示数据)。通常不需要在一系列请求间保持 DataSet 对象。对于这类
情况,可以使用 SqlDataReader。
SqlDataReader 对从 SQL 数据库检索的数据提供仅向前的只读指针。若要使用 SqlDataReader,请声明 SqlCommand 而不是 SqlDataAdapter。SqlCommand 公开返回 SqlDataReader 的 ExecuteReader 方法。还请注意,当使用 SqlCommand 时,必须显式打开和关闭 SqlConnection。
重要说明:始终记住在页完成执行之前关闭与数据模型的连接。如果不关闭连接,则可能会在等待页实例被垃圾回收处理期间不经意地超过连接限制。
Server=(local);中的local,这样设置可以避免由于服务器IP地址变更而造成网站不能访问
常用的数据库绑定代码
SqlConnection myConnection = new SqlConnection("server=(local)//NetSDK;database=pubs;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "作者");
MyDataGrid.DataSource=ds.Tables["作者"].DefaultView;
MyDataGrid.DataBind();
当执行不要求返回数据的命令(如插入、更新和删除)时,也使用 SqlCommand。该命令通过调用 ExecuteNonQuery 方法发出,而该方法返回受影响的行数
DefaultView 属性表示 DataSet 中表的当前状态,包括应用程序代码所做的任何更改(例如,行删除或值更改)。设置了 DataSource 属性后,调用 DataBind()
填充控件。
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView; MyDataGrid.DataBind(); 与MyDataGrid.DataSource=ds; MyDataGrid.DataMember="Authors"; MyDataGrid.DataBind();等效 重要说明: 注意 DataGrid 的 EnableViewState 属性已设置为 false。如果每个请 执行参数化选择代码 String selectCmd = "select * from Authors where state = @State"; SqlConnection myConnection = new SqlConnection("server=(local) |
对任何网格的共同要求是能够将它包含的数据排序。虽然 DataGrid 控件不为您显式排序它的数据,但它确实提供一种方法,在用户单击可用来排序数据的列标头时调用事件处理程序。当 DataGrid 的 AllowSorting 属性设置为 true 时,它呈现将 Sort 命令激发回网格的列标头的超级链接。将 DataGrid 的 OnSortCommand 属性设置为当用户单击列链接时要调用的处理程序。列的名称作为 DataGridSortCommandEventArgs 参数上的 SortExpression 属性传递,该参数可用来设置绑定到网格的 DataView 的 Sort 属性。下面的示例说明此过程。
<script> protected void MyDataGrid_Sort(Object Src, DataGridSortCommandEven <script> Protected Sub MyDataGrid_Sort(Src As Object, E As DataGridSort <script> protected function MyDataGrid_Sort(Src:Object, E:DataGridSort |
在本节开始已经提到,DataSet 以独立于实际数据源的方式被设计为抽象数据。通过将示例的重点从 SQL 改为 XML,可以明白这一点。DataSet 支持将 FileStream 对象用作参数的 ReadXml 方法。在这种情况
下读取的文件必须同时包含希望读取的架构和数据。
也可以分别读取数据和架构,使用 DataSet 的 ReadXmlData 和 ReadXmlSchema 方法
- 公共语言运行库的托管数据访问 API 抽象数据并用一致的方式表示它,与实际的数据源(SQL Server、OLEDB、XML 等)无关。
- 为了使页能够访问执行 SQL 数据访问所需的类,必须将 System.Data 和 System.Data.SqlClient 命名空间导入到页中。
- 从 SQL 查询填充数据集涉及创建 SqlConnection、将 SqlDataAdapter 对象与包含查询语句的连接关联和从命令填充数据集。
- DataGrid 控件支持采用 IEnumerable(或 ICollection)类型的 DataSource 属性。通过分配 DataSet 的 DefaultView 属性(DataView 类型),可以将此设置为 SQL 查询的结果。
- SqlDataAdapter 维护一个可用于用值替换变量标识符(由名称前的“@”表示)的 Parameters
集合。 - 当执行不要求返回数据的命令(如插入、更新和删除)时,使用 SqlCommand,而不是 SqlDataAdapter。该命令通过调用 ExecuteNonQuery 方法发出,而该方法返回受影响的行数。
- 使用 SqlCommand 时必须显式打开 SqlConnection(SqlDataAdapter 自动地为您处理打开连接)。始终记住在页完成执行前关闭与数据模型的 SqlConnection。如果没有关闭连接,则可能会在等待页实例被垃圾收集回收时不经意超过连接限制。
- 为了允许对行进行编辑,DataGrid 支持整型 EditItemIndex 属性,该属性指示网格的哪一行应该
是可编辑的。设置了该属性后,DataGrid 按该索引将行呈现为文本输入框,而不是简单的标签。 - DataGrid 公开一个可设置为主键字段名的 DataKeyField 属性。在连到 UpdateCommand 的事件
处理程序中,可以从 DataGrid 的 DataKeys 集合检索键名。 - 使用 DataGrid 中的 BoundColumn 控件使您可以完全控制列的顺序,以及它们的 ReadOnly 属性。
- 使用 DataGrid 中的 TemplateColumn 控件使您可以完全控制列的内容。
- ButtonColumn 控件可用于在该列的每一行中仅呈现按钮控件,而该列可与事件关联。
- HyperLinkColumn 可以添加到 DataGrid 的 Columns 集合,该集合支持在单击链接时定位到另一页。
- 当 DataGrid 的 AllowSorting 属性设置为 true 时,它呈现将 Sort 命令激发回网格的列标头的
超级链接。将 DataGrid 的 OnSortCommand 属性设置为当用户单击列链接时要调用的处理程序。 - DataSet 支持将 FileStream 作为参数的 ReadXml、ReadXmlData 和 ReadXmlSchema 方法,而该参数可用于从 XML 文件填充 DataSet。
- 使用存储过程可以减少在应用程序中执行繁重的数据库操作的开销。
DataList 和 Repeater 也支持 DataSource 属性,该属性(DataSource)可设置为任何 ICollection、IEnumerable 或 IListSource 类型
1. ASP.NET 声明性数据绑定语法使用 <%# %> 表示法。
2. 可以绑定到数据源、页或其他控件的属性、集合、表达式以及从方法调用返回的结果。
3. 语法示例
简单属性
| Customer: <%# custID %>
|
集合
| Orders: <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
|
表达式
| Contact: <%# ( customer.First Name + " " + customer.LastName ) %>
|
方法结果
| Outstanding Balance: <%# GetBalance(custID) %>
|
4. ASP Response.Write 与 DataBind 方法区别
ASP Response.Write 快捷方式语法在处理页时计算,而 ASP.NET 数据绑定语法仅在调用 DataBind 方法时计算。
5. DataBind 的级联
当在父控件上调用 DataBind 时,它级联到该控件的所有子控件。
例如,DataList1.DataBind()
将因此对 DataList 模板中的每一控件调用 DataBind 方法。在页上调用 DataBind — Page.DataBind()
或只是 DataBind()
— 会导致计算页上的所有数据绑定表达式
6. DataBinder.Eval
A.计算后期绑定的数据绑定表达式并且可选择将结果格式化为字符串。
B.<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
C.DataBinder.Eval 会对标准数据绑定语法带来很明显的性能损失,因为它使用后期绑定反射,注意这一点很重要。使用 DataBinder.Eval 时需谨慎,尤其是在不需要字符串格式化时。
7.数据绑定表达式必须计算为 String 类型的值
自定义控件类的代码
using System;
using System.Web;
using System.Web.UI;
namespace SimpleControlSamples {
public class Simple : Control {
protected override void Render(HtmlTextWriter output) {
output.Write("<H2>欢迎使用控件开发!</H2>");
}
}
}
aspx页引用该自定义控件的代码
<%@ Register TagPrefix="SimpleControlSamples" Namespace="SimpleControlSamples" Assembly="SimpleControlSamples" %>
<SimpleControlSamples:Simple id="MyControl" runat=server/>
属性类似具有访问器方法的“聪明”字段。应该从控件公开属性而不是公开公共字段,因为属性允许数据隐藏、可以版本化并受可视化设计器的支持。属性具有设置和检索属性的 get/set 访问器方法,并允许在需要时执行附加的程序逻辑。
如果 A 类具有一个类型为 B 类的属性,则 B 的属性(如果有)称为 A 的子属性。下面的示例定义自定义控件 SimpleSubProperty
,该控件具有 Format
类型的属性。Format
是具有两个基元属性的类——Color
和 Size
,这两个属性反过来成为 SimpleSubProperty
的子属性。
注意 ASP.NET 具有设置子属性的特殊语法。下面的代码示例显示如何以声明方式设置 SimpleSubProperty
上的 Format.Color
和 Format.Size
子属性。“-”语法指示子属性。
<SimpleControlSamples:SimpleSubProperty Message="Hello There" Format-Color="red" Format-Size="3" runat=server/>
每个控件都具有从 System.Web.UI.Control 继承的 Controls 属性. 这是表示控件的子控件(如果有)的集合属性
如果控件未用 ParseChildrenAttribute 标记,或是标记为 ParseChildrenAttribute(ChildrenAsProperties = false),则当控件在页上以声明方式使用时,ASP.NET 页框架将应用以下分析逻辑。如果分析器在控件的标记内遇到嵌套控件,它将创建嵌套控件的实例并将它们添加到控件的 Controls 属性。标记之间的文本添加为 LiteralControl。任何其他嵌套元素都生成分析器错误。
如:
<SimpleControlSamples:SimpleInnerContent id="MyControl" runat=server>
我的消息在控件标记内!!!!
</SimpleControlSamples:SimpleInnerContent>
以上正确
<SimpleControlSamples:SimpleInnerContent id="MyControl" runat=server>
<input type=”text” runat = server> </SimpleControlSamples:SimpleInnerContent>
以上错误,因为<input type=”text” runat = server>是一个控件,标记之间只能添加文本,要添加控件,必须设置属性ParseChildrenAttribute=true
在分析 ASP.NET 页时,样式信息被填充到 System.Web.UI.HtmlControls.HtmlControl 类上的 Style 属性(CssStyleCollection 类型)中。该属性本质上是一个词典,它将控件的样式公开为每个样式属性键值的字符串索引集合。例如,可以使用下面的代码在 HtmlInputText 服务器控件上设置并随后检索 width 样式属性。
<script language="C#" runat="server" > void Page_Load(Object sender, EventArgs E) {
MyText.Style["width"] = "90px";
Response.Write(MyText.Style["width"]);
}
</script>
<input type="text" id="MyText" runat="server"/>
<script language="VB" runat="server" >
Sub Page_Load(Sender As Object, E As EventArgs)
MyText.Style("width") = "90px"
Response.Write(MyText.Style("width"))
End Sub
</script>
<input type="text" id="MyText" runat="server"/>
<script language="JScript" runat="server" >
function Page_Load(sender : Object, E : EventArgs) : void {
MyText.Style("width") = "90px";
Response.Write(MyText.Style("width"));
}
</script>
<input type="text" id="MyText" runat="server"/>
|
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E ) {
Style style = new Style();
style.BorderColor = Color.Black;
style.BorderStyle = BorderStyle.Dashed;
style.BorderWidth = 1;
MyLogin.ApplyStyle (style);
MyPassword.ApplyStyle (style);
MySubmit.ApplyStyle (style);
}
</script>Login: <ASP:TextBox id="MyLogin" runat="server" />/<p/>
Password: <ASP:TextBox id="MyPassword" TextMode="Password" runat="server" />
View: <ASP:DropDownList id="MySelect" runat="server"> ... </ASP:DropDownList>