ASP.NET入门

最常使用的对象基本上有三种:连接、命令和数据集。
  • 连接表示与某些数据存储区(如 SQL Server 或 XML 文件)的物理连接。
  • 命令表示从数据存储区检索(选择)或对数据存储区进行操作(插入、更新、删除)的指令。
  • 数据集表示应用程序使用的实际数据。注意,数据集总是同它们的源连接和数据模型断开并可独立
    修改。不过,数据集的更改可以很容易与起始数据模型相协调。

使用数据集的好处是它为您提供了断开连接的数据库视图。可以在应用程序中操作数据集,然后在以后协
调更改和实际的数据库。对于长期运行的应用程序,这通常是最好的方法。对于 Web 应用程序,通常对
每个请求执行短操作(一般只是显示数据)。通常不需要在一系列请求间保持 DataSet 对象。对于这类
情况,可以使用 SqlDataReader

SqlDataReader 对从 SQL 数据库检索的数据提供仅向前的只读指针。若要使用 SqlDataReader,请声明 SqlCommand 而不是 SqlDataAdapterSqlCommand 公开返回 SqlDataReaderExecuteReader 方法。还请注意,当使用 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();等效
重要说明: 注意 DataGridEnableViewState 属性已设置为 false。如果每个请
求中都要填充数据,让 DataGrid 存储将通过往返行程由窗体发送来发送的状态信息没有
好处。因为 DataGrid 在维护状态时存储其所有数据,适当时将其关闭很重要,这样可以
提高页面性能。
执行参数化选择代码
String selectCmd = "select * from Authors where state = @State";

        SqlConnection myConnection = new SqlConnection("server=(local)
//NetSDK;database=pubs;Trusted_Connection=yes"); SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd,
myConnection); myCommand.SelectCommand.Parameters.Add(new SqlParameter
("@State", SqlDbType.NVarChar, 2)); myCommand.SelectCommand.Parameters["@State"].Value =
MySelect.Value; DataSet ds = new DataSet(); myCommand.Fill(ds, "作者"); MyDataGrid.DataSource= ds.Tables["作者"].DefaultView; MyDataGrid.DataBind();

对任何网格的共同要求是能够将它包含的数据排序。虽然 DataGrid 控件不为您显式排序它的数据,但它确实提供一种方法,在用户单击可用来排序数据的列标头时调用事件处理程序。当 DataGridAllowSorting 属性设置为 true 时,它呈现将 Sort 命令激发回网格的列标头的超级链接。将 DataGridOnSortCommand 属性设置为当用户单击列链接时要调用的处理程序。列的名称作为 DataGridSortCommandEventArgs 参数上的 SortExpression 属性传递,该参数可用来设置绑定到网格的 DataViewSort 属性。下面的示例说明此过程。

 

<script>
    protected void MyDataGrid_Sort(Object Src, DataGridSortCommandEven
tArgs E) { ... DataView Source = ds.Tables["Authors"].DefaultView; Source.Sort = E.SortExpression; MyDataGrid.DataBind(); } </script> <form runat="server"> <ASP:DataGrid id="MyDataGrid" OnSortCommand="MyDataGrid_Sort"
AllowSorting="true" runat="server" /> </form>

 

在本节开始已经提到,DataSet 以独立于实际数据源的方式被设计为抽象数据。通过将示例的重点从 SQL 改为 XML,可以明白这一点。DataSet 支持将 FileStream 对象用作参数的 ReadXml 方法。在这种情况
下读取的文件必须同时包含希望读取的架构和数据。

也可以分别读取数据和架构,使用 DataSetReadXmlDataReadXmlSchema 方法

  1. 公共语言运行库的托管数据访问 API 抽象数据并用一致的方式表示它,与实际的数据源(SQL Server、OLEDB、XML 等)无关。
  2. 为了使页能够访问执行 SQL 数据访问所需的类,必须将 System.DataSystem.Data.SqlClient 命名空间导入到页中。
  3. 从 SQL 查询填充数据集涉及创建 SqlConnection、将 SqlDataAdapter 对象与包含查询语句的连接关联和从命令填充数据集。
  4. DataGrid 控件支持采用 IEnumerable(或 ICollection)类型的 DataSource 属性。通过分配 DataSetDefaultView 属性(DataView 类型),可以将此设置为 SQL 查询的结果。
  5. SqlDataAdapter 维护一个可用于用值替换变量标识符(由名称前的“@”表示)的 Parameters
    集合。
  6. 当执行不要求返回数据的命令(如插入、更新和删除)时,使用 SqlCommand,而不是 SqlDataAdapter。该命令通过调用 ExecuteNonQuery 方法发出,而该方法返回受影响的行数。
  7. 使用 SqlCommand 时必须显式打开 SqlConnectionSqlDataAdapter 自动地为您处理打开连接)。始终记住在页完成执行前关闭与数据模型的 SqlConnection。如果没有关闭连接,则可能会在等待页实例被垃圾收集回收时不经意超过连接限制。
  8. 为了允许对行进行编辑,DataGrid 支持整型 EditItemIndex 属性,该属性指示网格的哪一行应该
    是可编辑的。设置了该属性后,DataGrid 按该索引将行呈现为文本输入框,而不是简单的标签。
  9. DataGrid 公开一个可设置为主键字段名的 DataKeyField 属性。在连到 UpdateCommand 的事件
    处理程序中,可以从 DataGrid 的 DataKeys 集合检索键名。
  10. 使用 DataGrid 中的 BoundColumn 控件使您可以完全控制列的顺序,以及它们的 ReadOnly 属性。
  11. 使用 DataGrid 中的 TemplateColumn 控件使您可以完全控制列的内容。
  12. ButtonColumn 控件可用于在该列的每一行中仅呈现按钮控件,而该列可与事件关联。
  13. HyperLinkColumn 可以添加到 DataGrid 的 Columns 集合,该集合支持在单击链接时定位到另一页。
  14. DataGridAllowSorting 属性设置为 true 时,它呈现将 Sort 命令激发回网格的列标头的
    超级链接。将 DataGridOnSortCommand 属性设置为当用户单击列链接时要调用的处理程序。
  15. DataSet 支持将 FileStream 作为参数的 ReadXmlReadXmlDataReadXmlSchema 方法,而该参数可用于从 XML 文件填充 DataSet
  16. 使用存储过程可以减少在应用程序中执行繁重的数据库操作的开销。

DataListRepeater 也支持 DataSource 属性,该属性(DataSource)可设置为任何 ICollectionIEnumerableIListSource 类型

数据绑定语法

 

 

 

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 方法。在上调用 DataBindPage.DataBind() 或只是 DataBind()会导致计算页上的所有数据绑定表达式

 

 

 

6.  DataBinder.Eval

 

 

 

A.计算后期绑定的数据绑定表达式并且可选择将结果格式化为字符串。

 

 

 

B.<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>

 

CDataBinder.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>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值