asp.net學習之SqlDataSource 2 select的四種參數賦予形式的解釋

604人閱讀 評論(0) 收藏 舉報

  通過 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}

 

   3.2 CookieParameter對象 
       CookieParameter對象表示瀏覽器端的Cookie,除了具備父類Parameter的所有屬性外,還具備以下屬性:
           ● CookieName : 瀏覽器cookie的名稱
例4:如何使用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對象  
     FormParameter對象表示一個提效給WEB服務器的表單字段,通常,在asp.net中不用像asp中需要直接處理瀏覽器中的表單,因為表單處理功能已經封裝在表單控件中了。
例5:如何使用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>


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowFormParameter.aspx.cs" Inherits="ShowFormParameter" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<head>
<title></title>
</head>
<body>
    <form action="ShowFormParameter.aspx" method="post"> <!-- 需要提交的表單 -->
         <label for="txtName">Movie Title:</label> 
         <input name="txtName" />
         <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="SqlDataSource1" runat="server" /> <!--GirdView控件,顯示數據 -->
 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
        ConnectionString="<%$ ConnectionStrings:sssConnectionString %>"
        DeleteCommand="DELETE FROM [K] WHERE [id] = @id"
        InsertCommand="INSERT INTO [K] ( [name], [keyname]) VALUES ( @name, @keyname)"
        SelectCommand="SELECT * FROM [K] WHERE ([name] = @name)"
        UpdateCommand="UPDATE [K] SET [name] = @name, [keyname] = @keyname WHERE [id] = @id">
        <SelectParameters>
            <asp:FormParameter DefaultValue="CHEN" FormField="txtName" Name="name"  Type="String" />              
        </SelectParameters>
        <DeleteParameters>
            <asp:Parameter Name="id" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="keyname" Type="String" />
            <asp:Parameter Name="id" Type="Int32" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="id" Type="Int32" />
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="keyname" Type="String" />
        </InsertParameters>
    </asp:SqlDataSource>
    </form>
</body>

 


   3.4 ProfileParameter對象   
       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
        ConnectionString=”<%$ ConnectionStrings:Movies %>”  Runat=”server”>
    <SelectParameters>
        <asp:QueryStringParameter Name=”Id” QueryStringField=”Id” />
    </SelectParameters>
</asp:SqlDataSource>

   3.6 SessionParameter對象   
       SessionParameter對象表示存儲在Session狀態中的項目,SessionParameter除包含Parameter基類的所有屬性外,還具備以下屬性:
          ● SessionField: 所表示會話狀態中的項目名稱
例8:如何使用SessionParameter對象


<script runat=”server”>
void Page_Load()
{
    Session[“MovieCategoryName”] = “Animation”;
}
</script>

<asp:SqlDataSource id=”srcMovies”
        SelectCommand=”SELECT Name As Category,Title,Director FROM Movies
                                  INNER JOIN MovieCategories ON CategoryId = MovieCategories.id
                                  WHERE Name=@Name
        ConnectionString=”<%$ ConnectionStrings:Movies %>”   Runat=”server”>
    <SelectParameters>
        <asp:SessionParameter Name=”Name” SessionField=”MovieCategoryName” />
    </SelectParameters>
</asp:SqlDataSource>
 

4. 通過程序控制SqlDataSource對象
   SqlDataSource控件一般都與數據綁定控件一起使用,在本節中,可以知道、
       ● 如何通過在代碼中直接使用SqlDataSource控件的屬性和方法來創建參數、
       ● 如何執行選擇、插入、更新和刪除命令

   4.1 添加ADO.NET參數
        SqlDataSource并沒有直接與數據交互,它是通過ADO.NET對象與數據庫交互的。當和SqlDataSource控件一起使用時,所有聲明的ASP.NET參數也應轉換成相應的ADO.NET參數
        在某些情況下,希望直接處理ADO.NET參數,可以通過在執行相應的命令前通過程序增加額外的ADO.NET參數
例9:通過程序增加SqlDataSource的SelectCommand參數 


<script runat=”server”>
protected void srcGuestBook_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
    // SqlDataSourceCommandEventArgs 為 SqlDataSource 控件的 Updating、Deleting 和 Inserting 事件提供數據。
    // MSDN上這樣解釋SqlDataSourceCommandEventArgs參數:
    /* 因為 SqlDataSourceCommandEventArgs 類是從 CancelEventArgs 類派生的,所以可以通過將 Cancel 屬性設置為 true,
       取消掛起的 SqlDataSource 數據庫命令。通過訪問由 Command 屬性公開的 DbCommand 對象,可以在運行此命令之前,
       檢查和操作 CommandText、Parameters 集合以及其他命令屬性。*/
    e.Command.Parameters.Add(new SqlParameter(“@Name”, User.Identity.Name));   // 為Insert操作添加一個參數
}
</script>
<!-- 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”  OnInserting=”srcGuestBook_Inserting”>
<!-- 與例6不同的是,這里無需添加相應的參數對象,參數對象通過srcGuestBook_Inserting事件進行追加 -->
</asp:SqlDataSource>

        另外,需要說明的是,Inserting、Updating、Deleting操作傳遞給函數的都是SqlDataSourceCommandEventArgs參數,但Filtering傳遞給函數的卻是SqlDataSourceFilteringEventArgs對象,使用以下方法取得已和設定的參數:


protected void SqlDataSource1_Filtering(object sender, SqlDataSourceFilteringEventArgs e)
{
     if (e.ParameterValues.Count > 0)
     {
          Label1.Text = e.ParameterValues[0].ToString();
     }
     if (Textbox1.Text == "")
    {    // 添加參數:第一個為參數名,第二個為參數Value。
           e.ParameterValues.Clear();
           e.ParameterValues.Add("FullName", "Nancy Davolio");
     }
}


    4.2 執行Insert、Update、Delete命令
         其實,執行相應的命令,只要調用SqlDataSource對象的Insert()、Update()、Delete()方法就可以了。
例10:通過程序,執行SqlDataSource Insert命令


<script runat=”server”>

protected void btnAddEntry_Click(object sender, EventArgs e)
{
    srcGuestBook.InsertParameters[“Name”].DefaultValue = txtName.Text;
    srcGuestBook.InsertParameters[“Comments”].DefaultValue = txtComments.Text;
    srcGuestBook.Insert();
}
</script>

<asp:TextBox id=”txtName” Runat=”server” /> <!-- 輸入值1 -->
<asp:TextBox id=”txtComments” TextMode=”MultiLine”
          Columns=”50” Rows=”2” Runat=”server” />  <!-- 輸入值2 -->
<asp:Button id=”btnAddEntry” Text=”Add Entry”  Runat=”server” OnClick=”btnAddEntry_Click” />

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


   4.3 執行Select命令
         執行Select命令與其它命令不同,因為Select需要返回數據。SqlDataSource的Select方法返回一個實現IEnumerable的接口,DataView和DataReader都實現了這個接口,可以創建一個DataView或DataReader對象接受該數據。