28
15 使用資料來源控制項 存取資料庫

15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

Embed Size (px)

Citation preview

Page 1: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15 使用資料來源控制項 存取資料庫

Page 2: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-2

網網網 頁頁頁 程程程 式式式 設設設 計計計

15-1 認識資料來源控制項 使用 SqlDataReader 和 DataSet 兩個物件存取 SQL Server 資料庫,雖然功能強大且

具有彈性,但過程複雜,如下所示,有些時候,您可能不需要強大的功能,而

是要快速查詢資料庫的資料並顯示出來。

為了簡化存取資料來源的過程,ASP.NET 3.5 內建下列資料來源控制項:

SqlDataSource:快速存取各種資料來源,例如 Microsoft SQL、Access、Oracle

Database,或具備 OLE DB、ODBC 驅動程式的資料來源。

AccessDataSource:快速存取 Microsoft Access 資料庫。

LinqDataSource:用來搭配 LINQ to SQL,其操作方式與 SqlDataSource 相似。

事實上,資料來源控制項將整個 .NET framework 資料提供者封裝在一起,您只

要指定少數的關鍵屬性,它就會自動幫您建立資料連接,執行 SQL 命令並傳回

執行結果,然後關閉資料連接。

Page 3: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-3

111555 使用資料來源控制項存取資料庫

15-2 SqlDataSource 控制項 SqlDataSource 控制項可以用來快速存取各種資料來源,例如 Microsoft Access、

Microsoft SQL Server、Oracle Database、MySQL…,其主要目的是為了簡化存取資

料來源的過程。

SqlDataSource 控制項可以執行查詢、更新、新增、刪除及篩選 5 種命令,每種

命令都有參數,其架構如下所示:

由上圖可知,SqlDataSource 控制項包含 5 種命令的參數,分別為 SelectParameters、

UpdateParameters、InsertParameters、DeleteParameters、FilterParameters,其用途是

傳遞參數給 SelectCommand、UpdateCommand、InsertCommand、DeleteCommand、

FilterExpression 屬性,當做各種命令的參數,關於參數的使用方式,我們稍後會

做說明。

SqlDataSource 控制項的宣告語法如下:

<asp:SqlDataSource runat="server" ID="…"

CancelSelectOnNullParameter="{True|False}" ConnectionString="…" DataSourceMode="{DataReader|DataSet}" DeleteCommand="…" DeleteCommandType="{Text|StoredProcedure}" FilterExpression="…" InsertCommand="…" InsertCommandType="{Text|StoredProcedure}" ProviderName="{System.Data.Odbc|System.Data.OleDb|System.Data.OracleClient| System.Data.SqlClient}" SelectCommand="…" SelectCommandType="{Text|StoredProcedure}" UpdateCommand="…" UpdateCommandType="{Text|StoredProcedure}">

Page 4: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-4

網網網 頁頁頁 程程程 式式式 設設設 計計計

<DeleteParameters>

<asp:Parameter ConvertEmptyStringToNull="{True|False}" DefaultValue="…" Direction="{Input|Output|InputOutput}" Name="…" Size="n" Type="{Empty|Object|DBNull|Boolean|Char|SByte|Byte|Int16|UInt16|Int32| UInt32|Int64|UInt64|Single|Double|Decimal|DateTime|String}" />

<asp:ControlParameter ControlID="…" ConvertEmptyStringToNull="{True|False}" DefaultValue="…" Direction="{Input|Output|InputOutput}" Name="…" PropertyName="…" Size="n" Type="{Empty|Object|DBNull|Boolean|Char|SByte|Byte|Int16|UInt16|Int32| UInt32|Int64|UInt64|Single|Double|Decimal|DateTime|String}" />

<asp:CookieParameter ConvertEmptyStringToNull="{True|False}" CookieName="…" DefaultValue="…" Direction="{Input|Output|InputOutput}" Name="…" Size="n" Type="{Empty|Object|DBNull|Boolean|Char|SByte|Byte|Int16|UInt16| Int32|UInt32|Int64|UInt64|Single|Double|Decimal|DateTime|String}" />

<asp:QueryStringParameter ConvertEmptyStringToNull="{True|False}" DefaultValue="…" Direction="{Input|Output|InputOutput}" Name="…" QueryStringField="…" Size="n" Type="{Empty|Object|DBNull|Boolean|Char|SByte|Byte|Int16|UInt16|Int32| UInt32|Int64|UInt64|Single|Double|Decimal|DateTime|String}" />

<asp:SessionParameter ConvertEmptyStringToNull="{True|False}" DefaultValue="…" Direction="{Input|Output|InputOutput}" Name="…" SessionField="…" Size="n" Type="{Empty|Object|DBNull|Boolean|Char|SByte|Byte|Int16|UInt16|Int32| UInt32|Int64|UInt64|Single|Double|Decimal|DateTime|String}" />

</DeleteParameters> <FilterParameters>

各類型的參數,例如 Parameter、ControlParameter、CookieParameter、 QueryStringParameter、SessionParameter

</FilterParameters> <InsertParameters>

各類型的參數,例如 Parameter、ControlParameter、CookieParameter、 QueryStringParameter、SessionParameter

</InsertParameters> <SelectParameters>

各類型的參數,例如 Parameter、ControlParameter、CookieParameter、 QueryStringParameter、SessionParameter

</SelectParameters> <UpdateParameters>

各類型的參數,例如 Parameter、ControlParameter、CookieParameter、 QueryStringParameter、SessionParameter

</UpdateParameters> </asp:SqlDataSource>

Page 5: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-5

111555 使用資料來源控制項存取資料庫

SqlDataSource 控制項可以執行查詢、更新、新增、刪除及篩選資料的動作,最

單純的情況就是從資料來源查詢資料,然後使用資料繫結控制項將資料顯示出

來,至於更新、新增、刪除的部份,通常會搭配 GridView、DetailsView…等控制

項使用,我們會在第 16 章及錄附 H 做介紹。

使用 SqlDataSource 資料來源控制項存取資料來源的步驟如下:

1. 宣告 SqlDataSource 控制項。

2. 使用 ProviderName 屬性指定欲存取哪種資料來源。

3. 使用 ConnectionString 屬性指定連接資料來源的連接字串。

4. 使用 SelectCommand 屬性指定欲執行的 Select 陳述式。

SqlDataSource 資料來源控制項的屬性

CancelSelectOnNullParameter="{True|False}":取得或設定當 SelectCommand 屬

性指定的 Select 陳述式具有參數,且其任一參數值為 Nothing 時,是否取消

執行 Select 陳述式,True 表示取消執行查詢的動作。

ConnectionString="…":取得或設定開啟資料庫的連接字串。

DataSourceMode="{DataReader|DataSet}":取得或設定取得資料的模式,屬性

值為 SqlDataSourceMode 列舉所定義的模式,DataReader 表示使用 DataReader

物件取得資料,DataSet 表示使用 DataSet 物件取得資料。

DeleteCommand="…":取得或設定用來從資料來源刪除資料的 SQL 命令或

預存程序,這個屬性只有在 SqlDataSource 控制項判斷需要從資料來源刪除

資料時使用,其用途是告訴 SqlDataSource 物件如何從資料來源刪除資料。

DeleteCommandType="{Text|StoredProcedure}":取得或設定 DeleteCommand 屬

性 所 代 表 的 命 令 類 型 (SQL 命 令 、 預 存 程 序 名 稱 ) , 屬 性 值 為

SqlDataSourceCommandType 列舉所定義的命令類型。

Page 6: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-6

網網網 頁頁頁 程程程 式式式 設設設 計計計

DeleteParameters:取得 ParameterCollection,用來將參數傳遞給 DeleteCommand

屬性指定的 SQL 命令或預存程序。

FilterExpression="…":取得或設定用來篩選資料的條件,這個屬性只有當

DataSourceMode="DataSet" 時可以使用,舉例來說,假設要篩選「姓名」欄

位為「孫小美」的資料,那麼可以寫成 FilterExpression="姓名= '孫小美'"。

FilterParameters:取得 ParameterCollection,用來將參數傳遞給 FilterExpression

屬性指定的篩選條件。

InsertCommand="…":取得或設定用來從資料來源新增資料的 SQL 命令或預

存程序,這個屬性只有在 SqlDataSource 控制項判斷需要從資料來源新增資

料時使用,其用途是告訴 SqlDataSource 物件如何從資料來源新增資料。

InsertCommandType="{Text|StoredProcedure}":取得或設定 InsertCommand 屬性

所 代 表 的 命 令 類 型 (SQL 命 令 、 預 存 程 序 名 稱 ) , 屬 性 值 為

SqlDataSourceCommandType 列舉所定義的命令類型。

InsertParameters:取得 ParameterCollection,用來將參數傳遞給 InsertCommand

屬性指定的 SQL 命令或預存程序。

ProviderName="…":取得或設定使用哪個 .NET Framework 資料提供者存取

資料來源,屬性值如下:

屬性值 說明

System.Data.Odbc 使用 ODBC 資料提供者。

System.Data.OleDb 使用 OLE DB 資料提供者。

System.Data.OracleClient 使用 Oracle 資料提供者。

System.Data.SqlClient 使用 SQL Server 資料提供者。

SelectCommand="…":取得或設定查詢資料來源的 SQL 命令或預存程序。

Page 7: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-7

111555 使用資料來源控制項存取資料庫

SelectCommandType="{Text|StoredProcedure}":取得或設定 SelectCommand 屬

性 所 代 表 的 命 令 類 型 (SQL 命 令 、 預 存 程 序 名 稱 ) , 屬 性 值 為

SqlDataSourceCommandType 列舉所定義的命令類型。

SelectParameters:取得 ParameterCollection,用來將參數傳遞給 SelectCommand

屬性指定的 SQL 命令或預存程序。

UpdateCommand="…":取得或設定用來更新資料來源的 SQL 命令或預存程

序,這個屬性只有在 SqlDataSource 控制項判斷需要更新資料來源時使用,

其用途是告訴 SqlDataSource 物件如何更新資料來源。

UpdateCommandType="{Text|StoredProcedure}" : 取 得 或 設 定 UpdateCommand

屬 性 所 代 表 的 命 令 類 型 (SQL 命 令 、 預 存 程 序 名 稱 ) , 屬 性 值 為

SqlDataSourceCommandType 列舉所定義的命令類型。

UpdateParameters : 取 得 ParameterCollection , 用 來 將 參 數 傳 遞 給

UpdateCommand 屬性指定的 SQL 命令或預存程序。

SqlDataSource 資料來源控制項的方法

Delete():執行刪除的動作,這個方法會由 DeleteParameters 取得參數值,然

後將它傳遞給 DeleteCommand 屬性指定的 SQL 命令或預存程序,再執行

DeleteCommand 屬性指定的 SQL 命令或預存程序。

Insert():執行新增的動作,這個方法會由 InsertParameters 取得參數值,然後

將 它 傳 遞 給 InsertCommand 屬 性 指 定 的 SQL 命 令 或 預 存 程 序 , 再 執 行

InsertCommand 屬性指定的 SQL 命令或預存程序。

Select():執行查詢的動作,這個方法會由 SelectParameters 取得參數值,然

後將它傳遞給 SelectCommand 屬性指定的 SQL 命令或預存程序,再執行

SelectCommand 屬性指定的 SQL 命令或預存程序。

Update():執行更新的動作,這個方法會由 UpdateParameters 取得參數值,然

後將它傳遞給 UpdateCommand 屬性指定的 SQL 命令或預存程序,再執行

UpdateCommand 屬性指定的 SQL 命令或預存程序。

Page 8: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-8

網網網 頁頁頁 程程程 式式式 設設設 計計計

現在,我們要使用 SqlDataSource 控制項改寫第 13-31 頁的隨堂練習,也就是從

SampleDB 資料庫的「員工基本資料」資料表查詢所有資料的「姓名」欄位,然

後使用 BulletedList 控制項將資料顯示出來,請您也跟著一起做:

1. 建立名稱為 BulletedList.aspx 的新網頁,然後在工具箱的 [資料] 索引標籤

內找到 [SqlDataSource] 控制項,將之拖曳至網頁。

2. [SqlDataSource] 控制項出現在網頁,請將之選取,然後點按其右上角的

[智慧標籤] 按鈕,在出現的功能表中選取 [設定資料來源]。

1.選取此控制項

2. 拖曳至此

1. 選取 SqlDataSource 控制項

3. 選取 [設定資料來源]2. 點按此鈕

Page 9: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-9

111555 使用資料來源控制項存取資料庫

3. 出現 [選擇資料連接] 對話方塊,請將 [您的應用程式應該使用哪個資料連接

來連接資料庫] 欄位設定為 Web.config 中設定的 SampleDB 資料連接,然後

按 [下一步]。

4. 依照下圖操作。

1.核取此項

3.核取「員工編號」

和「姓名」欄位

2.選取「員工基本

資料」資料表

4.自動產生的SQL查詢

顯示在此

5.按

[

下一步]

Page 10: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-10

網網網 頁頁頁 程程程 式式式 設設設 計計計

5. 出現 [測試查詢 ] 對話方塊,請點取 [測試查詢 ] 按鈕,看看是否能夠正確

的顯示資料庫資料,若沒問題,請按 [完成]。

6. 將 BulletedList 控制項拖曳至網頁,然後將之選取,點按其右上角的 [智

慧標籤] 按鈕,在出現的功能表中選取 [選擇資料來源]。

1. 選取 BulletedList 控制項 2. 點按此鈕

3. 選按 [設定資料來源]

Page 11: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-11

111555 使用資料來源控制項存取資料庫

7. 將 [選取資料來源 ] 欄位設定為剛才建立的 SqlDataSource 控制項,然後將

[選取要顯示在 BulletedList 中的資料欄位] 和 [選取 BulletedList 值的資料欄

位] 欄位分別設定為「姓名」及「員工編號」,再按 [確定]。

8. 將網頁切換至 [原始檔] 模式,微調原始碼即可得到如下結果。

\Ch15\BulletedList.aspx

01:<html> 02: <body> 03: <form id="form1" runat="server"> 04: <asp:SqlDataSource ID="SqlDataSource1" runat="server"

ConnectionString="<%$ ConnectionStrings:SampleDB %>" SelectCommand="SELECT [姓名], [員工編號] FROM [員工基本資料]" />

05: 員工名單: 06: <asp:BulletedList ID="BulletedList1" runat="server"

DataSourceID="SqlDataSource1" DataTextField="姓名" DataValueField="員工編號">

07: </asp:BulletedList> 08: </form> 09: </body> 10:</html>

宣告 BulletedList 控制項,DataSourceID 屬性指定資料來源是 ID 為 "SqlDataSource1" 的資料來源控制項。

Page 12: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-12

網網網 頁頁頁 程程程 式式式 設設設 計計計

9. 網頁執行結果如下。

接下來要為您介紹 SqlDataSource 控制項參數的使用方式,無論哪種 SQL 命令,

依照使用場合不同,常用的參數有 Parameter、ControlParameter、CookieParameter、

QueryStringParameter、SessionParameter。

Parameter 參數

Parameter 參數適用於參數值來自區域變數的值,或參數值為固定值的場合,

其屬性如下:

ConvertEmptyStringToNull="{True|False}":取得或設定當參數值為空字串時,

是否自動將參數值轉換為 Nothing。

DefaultValue="…":取得或設定參數的預設值,此預設值在參數值為 Nothing

時會自動成為參數值。

Direction="{Input|Output|InputOutput}":取得或設定參數的類型 (輸入參數、

輸出參數、輸入輸出參數),屬性值為 ParameterDirection 列舉所定義的類型。

Page 13: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-13

111555 使用資料來源控制項存取資料庫

Name="…":取得或設定參數的名稱,當資料來源為 ODBC 或 OLE DB 時,

參數名稱並不重要,因為此兩者是以參數順序傳遞參數,而不是參數名稱。

Size="n":取得或設定參數的大小。

Type="{Empty |Object |DBNull |Boolean |Char |SByte |Byte | Int16 |UInt16 | Int32 |

UInt32|Int64|UInt64|Single|Double|Decimal|DateTime|String}":取得或設定參數

的資料型別,屬性值為 TypeCode 列舉所定義的資料型別。

例如下面的敘述是建立一個名稱為「零組件種類」的輸入參數,資料型別為字

串,參數預設值為 "主機板":

<asp:Parameter Name="零組件種類" Type="String" Direction="Input"

DefaultValue="主機板" />

ControlParameter 參數

ControlParameter 參數適用於參數值來自某伺服器控制項的屬性值,它繼承自

Parameter 參數,所以除了擁有 ConvertEmptyStringToNull、DefaultValue、Direction、

Name、Size、Type 等屬性之外,尚有下列屬性:

ControlID="…":取得或設定參數值來自 ID 為何的伺服器控制項。

PropertyName="…":取得或設定參數值來自伺服器控制項的哪個屬性值。

例如下面的敘述是建立一個名稱為 "廠牌" 的輸入參數,資料型別為字串,參

數值來自 ID 為 "Brand" 之伺服器控制項的 SelectedValue 屬性值,如果參數值為

Nothing,則參數值預設為 "Intel":

<asp:ControlParameter Name="廠牌" Type="String" ControlID="Brand"

PropertyName="SelectedValue" DefaultValue="Intel" />

Page 14: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-14

網網網 頁頁頁 程程程 式式式 設設設 計計計

CookieParameter 參數

CookieParameter 參數適用於參數值來自 Cookie 變數值,它繼承自 Parameter 參

數,所以除了擁有 ConvertEmptyStringToNull、DefaultValue、Direction、Name、Size、

Type 等屬性之外,尚有 CookieName="…" 屬性,用來取得或設定參數值來自哪

個 Cookie 變數值,例如下面的敘述是建立一個名稱為 "帳號" 的輸入參數,資

料型別為字串,參數值來自名稱為 "UserName" 的 Cookie 變數值:

<asp:CookieParameter Name="帳號" Direction="Input" Type="String" CookieName="UserName" />

QueryStringParameter 參數

QueryStringParameter 參 數 適 用 於 參 數 值 來 自 網 址 的 查 詢 字 串 , 它 繼 承 自

Parameter 參數,所以除了擁有 ConvertEmptyStringToNull、DefaultValue、Direction、

Name、Size、Type 等屬性之外,尚有 QueryStringField="…" 屬性,用來取得或設

定參數值來自哪個查詢字串的值,例如下面的敘述是建立一個名稱為 "種類"

的輸入參數,資料型別為字串,參數值來自名稱為 "type" 的查詢字串值:

<asp:QueryStringParameter Name="種類" Type="String" QueryStringField="type"

DefaultValue="CPU" />

SessionParameter 參數

SessionParameter 參 數 適 用 於 參 數 值 來 自 特 定 Session 變 數 值 , 它 繼 承 自

Parameter 參數,所以除了擁有 ConvertEmptyStringToNull、DefaultValue、Direction、

Name、Size、Type 等屬性之外,尚有 SessionField="…" 屬性,用來取得或設定

參數值來自哪個 Session 變數值,例如下面的敘述是建立一個名稱為 "密碼" 的

輸入參數,資料型別為字串,參數值來自名稱為 "UserPwd" 的 Session 變數值:

<asp:CookieParameter Name="密碼" Direction="Input" Type="String"

SessionField="UserPwd" />

Page 15: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-15

111555 使用資料來源控制項存取資料庫

現在,我們來示範如何使用 QueryStringParameter 參數,假設要從 SampleDB 資料

庫的「零組件報價」資料表查詢符合查詢字串 type 指定之種類的「廠牌」欄位,

然後使用 CheckBoxList 控制項顯示資料,其執行結果如下所示:

請您也跟著一起做:

1. 建立名稱為 CheckBoxList.aspx 的新網頁,然後在工具箱的 [資料] 索引標籤

內找到 [SqlDataSource] 控制項並按兩下。

2. [SqlDataSource] 控制項出現在網頁中,請將之選取,然後點按其右上角的

[智慧標籤] 按鈕,在出現的功能表中選取 [設定資料來源]。

當查詢字串 type 省略時,顯示零組件種類為「主機板」的所有廠牌。

當查詢字串 type等於CPU時,顯示零組件種類為「CPU」的所有廠牌。

Page 16: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-16

網網網 頁頁頁 程程程 式式式 設設設 計計計

3. 出現 [選擇資料連接] 對話方塊,請將 [您的應用程式應該使用哪個資料連接

來連接資料庫] 欄位設定為 Web.config 中設定的 SampleDB 資料連接,然後

按 [下一步]。

4. 依照下圖操作。

3.核取「廠牌」欄位

2.選取「零組件報價」資料表

1.核取此項

自動產生的SQL

查詢顯示在此

5.點按此鈕

4.核取此項表示不

抓取重複的資料

Page 17: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-17

111555 使用資料來源控制項存取資料庫

5. 出現如下對話方塊供您指定 Where 條件,請依照下圖操作。

6. 參數設定如下,請按 [確定]。

1. 指定排序欄位

2. 設定為「=」

3. 指定參數類型

6. 按 [加入]

5. 參數預設值為 “主機板”

4. 設定參數值來自type 查詢字串的值

Page 18: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-18

網網網 頁頁頁 程程程 式式式 設設設 計計計

7. [Select 陳述式] 欄位會顯示自動產生的 SQL 命令,請按 [下一步]。

請注意,上圖的 [ORDER BY] 按鈕可以設定資料的排序方式,但是當核取

[只傳回不重複的資料列 ] 選 項 時 , 將 無 法 使 用 排 序 功 能 ; 此 外 , 若 要

SqlDataSource 控制項自動產生 Insert、Update、Delete 等陳述式,資料行必

須包含主索引鍵,例如「編號」欄位,然後按 [進階],再於如下對話方塊

中核取 [產生 INSERT、UPDATE 和 DELETE 陳述式] 即可。

Page 19: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-19

111555 使用資料來源控制項存取資料庫

8. 出現 [測試查詢] 對話方塊,請按 [測試查詢]。

9. 出現 [參數值編輯器] 對話方塊,請輸入型別、DbType 及參數值,然後按 [確

定]。

10. 查詢結果如下,請按 [完成]。

Page 20: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-20

網網網 頁頁頁 程程程 式式式 設設設 計計計

11. 將 CheckBoxList 控制項拖曳至網頁,然後將之選取,點按其右上角的 [智

慧標籤] 按鈕,在出現的功能表中選取 [選擇資料來源]。

12. 將 [選取資料來源] 欄位設定剛才建立的 SqlDataSource 控制項,然後將 [選

取要顯示在 BulletedList 中的資料欄位] 和 [選取 BulletedList 值的資料欄位]

欄位均設定為「廠牌」,再按 [確定]。

13. 將網頁切換至 [原始檔] 模式,微調原始碼即可得到如下結果。

\Ch15\CheckBoxList.aspx (下頁續 1/2)

01:<html> 02: <body> 03: <form id="form1" runat="server"> 04: <asp:SqlDataSource ID="SqlDataSource1" runat="server" 05: ConnectionString="<%$ ConnectionStrings:SampleDB %>" 06: SelectCommand="SELECT DISTINCT [廠牌] FROM [零組件報價]

WHERE ([零組件種類] = @零組件種類)">

Page 21: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-21

111555 使用資料來源控制項存取資料庫

\Ch15\CheckBoxList.aspx (接上頁 2/2)

07: <SelectParameters> 08: <asp:QueryStringParameter DefaultValue="主機板" Name="零組件種類" 09: QueryStringField="type" Type="String" /> 10: </SelectParameters> 11: </asp:SqlDataSource> 12: 廠牌: 13: <asp:CheckBoxList ID="CheckBoxList1" runat="server" 14: DataSourceID="SqlDataSource1" 15: DataTextField="廠牌" DataValueField="廠牌"> 16: </asp:CheckBoxList> 17: </form> 18: </body> 19:</html>

04 ~ 11:宣告 SqlDataSource 控制項,ConnectionString 屬性用來指定使用

web.config 組態檔定義的連接字串存取資料庫,此處為連接 SampleDB 資料

庫,SelectCommand 屬性用來指定欲執行的 Select 陳述式,其中 DISTINCT

表示要過濾掉重複的資料,並且此 Select 陳述式包含名稱為「零組件種類」

的參數。

第 07 ~ 10 行用來定義執行 Select 陳述式時所要傳入的參數,第 08、09 行是

定義一個名稱為「零組件種類」的輸入參數,資料型別為字串,參數值來

自名稱為 type 的查詢字串,如果查詢字串 type 為 Nothing,那麼參數值預設

為 "主機板"。

13 ~ 16:宣告 CheckBoxList 控制項,DataSourceID 屬性用來指定資料來源是

ID 為 "SqlDataSource1" 的資料來源控制項。請注意,當資料來源為資料來

源 控 制 項 時 , 必 須 使 用 DataSourceID 屬 性 指 定 資 料 來 源 , 而 不 是 使 用

DataSource 屬性指定資料來源。

Page 22: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-22

網網網 頁頁頁 程程程 式式式 設設設 計計計

15-3 LinqDataSource 控制項 LinqDataSource 控制項可以用來簡化 LINQ to SQL 的過程,讓您不需撰寫任何

LINQ 查詢喔!

現在,我們來示範如何使用 QueryStringParameter 參數,假設要從 SampleDB 資料

庫的「零組件報價」資料表查詢符合查詢字串 type 指定之零組件種類的資料,

然後使用 GridView 控制項顯示資料,其執行結果如下所示。

當查詢字串type

省略時,顯

示零組件種類為「主機板」

的所有資料。

當查詢字串

type

等於

CP

U

時,顯示零組件種類

為「C

PU

」的所有資料。

Page 23: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-23

111555 使用資料來源控制項存取資料庫

現在,請您跟著我們一起做:

1. 在 Visual Studio 2008 的 [方案總管] 內選取 App_Data 資料夾,然後按一下滑

鼠右鍵,選取 [加入新項目],再依照下圖操作。

2. 自動開啟 Price.dbml 檔案,請在 [伺服器總管] 內找到 SampleDB 資料庫的「零

組件報價」資料表,然後將之拖曳到 Price.dbml 的設計介面。

3.選取

[Visual B

asic]

1. 選取「LINQ to SQL 類別」

2. 輸入檔案名稱 Price.dbml

4.按

[

加入]

Page 24: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-24

網網網 頁頁頁 程程程 式式式 設設設 計計計

3. 得到如下結果,LINQ 與 SQL Server 資料庫之間的 Mapping 建立完成,自動

產生的程式碼均儲存在 Price.designer.vb。

4. 建立名稱為 LinqDataSource.aspx 的新網頁,然後在工具箱的 [資料] 索引標

籤內找到 [LinqDataSource] 控制項並按兩下。

5. [LinqDataSource] 控制項出現在網頁中,請將之選取,然後點按其右上角

的 [智慧標籤] 按鈕,在出現的功能表中選取 [設定資料來源]。

Page 25: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-25

111555 使用資料來源控制項存取資料庫

6. 將 [選擇您的內容物件] 欄位設定為 PriceDataContext,然後按 [下一步]。

7. 依照下圖操作。

2.核取「*

」,表示抓

取所有欄位。

3.點取此鈕

1.選

價(Table<

零組件報價>)」

資料表

Page 26: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-26

網網網 頁頁頁 程程程 式式式 設設設 計計計

8. 出現如下對話方塊供您指定 Where 運算式,請依照下圖操作。

9. 參數設定如下,請按 [確定]。

1. 指定篩選欄位

2. 設定為「==」

3. 指定參數類型

6. 按 [加入]

5. 參數預設值為 “主機板”

4. 設定參數值來自type 查詢字串的值

Page 27: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-27

111555 使用資料來源控制項存取資料庫

10. 回到 [設定資料選取範圍] 對話方塊,請按 [完成]。

這個對話方塊中尚有 [OrderBy] 和 [進階] 兩個按鈕,其功能如下:

[OrderBy]:點按此鈕可以設定資料的排序方式。

[進階]:若要 LinqDataSource 控制項可以對 SQL Server 資料庫進行新增、

更新及刪除等動作,必須在步驟 7. 勾選「*」,表示抓取資料表的所

有欄位,然後按 [進階],再核取如下對話方塊中的三個選項即可。

11. 在工具箱的 [資料] 索引標籤內找到 [GridView] 控制項,將之拖曳至網頁

並加以選取,然後點按其右上角的 [智慧標籤] 按鈕,在 [選擇資料來源 ]

欄位中選取「LinqDataSource1」。

1. 插入並選取 GridView 控制項

2. 點按此鈕

3. 選擇資料來源

Page 28: 15 存取資料庫epaper.gotop.com.tw/pdf/AEL006300.pdf15-6 網網頁頁程程程式式式設設設計計計 Â DeleteParameters:取得ParameterCollection,用來將參數傳遞給DeleteCommand

15-28

網網網 頁頁頁 程程程 式式式 設設設 計計計

13. 將網頁切換至 [原始檔 ] 模式,並微調原始碼,即可得到如下結果,其中

GridView 控制項會在第 16 章介紹,現在不懂沒關係。

\Ch15\LinqDataSource.aspx

<html> <body> <form id="form1" runat="server"> <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="PriceDataContext" TableName="零組件報價" Where="零組件種類 == @零組件種類"> <WhereParameters> <asp:QueryStringParameter DefaultValue="主機板" Name="零組件種類" QueryStringField="type" Type="String" /> </WhereParameters> </asp:LinqDataSource> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="編號" DataSourceID="LinqDataSource1"> <Columns> <asp:BoundField DataField="編號" HeaderText="編號" InsertVisible="False" ReadOnly="True" SortExpression="編號" /> <asp:BoundField DataField="零組件種類" HeaderText="零組件種類" /> <asp:BoundField DataField="廠牌" HeaderText="廠牌" /> <asp:BoundField DataField="規格" HeaderText="規格" /> <asp:BoundField DataField="價格" HeaderText="價格" /> <asp:BoundField DataField="報價日期" HeaderText="報價日期" /> <asp:BoundField DataField="廠商資訊" HeaderText="廠商資訊" /> </Columns> </asp:GridView> </form> </body> </html>