Upload
trinhkhanh
View
222
Download
0
Embed Size (px)
Citation preview
15 使用資料來源控制項 存取資料庫
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 命令並傳回
執行結果,然後關閉資料連接。
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}">
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>
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 列舉所定義的命令類型。
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 命令或預存程序。
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 命令或預存程序。
15-8
網網網 頁頁頁 程程程 式式式 設設設 計計計
現在,我們要使用 SqlDataSource 控制項改寫第 13-31 頁的隨堂練習,也就是從
SampleDB 資料庫的「員工基本資料」資料表查詢所有資料的「姓名」欄位,然
後使用 BulletedList 控制項將資料顯示出來,請您也跟著一起做:
1. 建立名稱為 BulletedList.aspx 的新網頁,然後在工具箱的 [資料] 索引標籤
內找到 [SqlDataSource] 控制項,將之拖曳至網頁。
2. [SqlDataSource] 控制項出現在網頁,請將之選取,然後點按其右上角的
[智慧標籤] 按鈕,在出現的功能表中選取 [設定資料來源]。
1.選取此控制項
2. 拖曳至此
1. 選取 SqlDataSource 控制項
3. 選取 [設定資料來源]2. 點按此鈕
15-9
111555 使用資料來源控制項存取資料庫
3. 出現 [選擇資料連接] 對話方塊,請將 [您的應用程式應該使用哪個資料連接
來連接資料庫] 欄位設定為 Web.config 中設定的 SampleDB 資料連接,然後
按 [下一步]。
4. 依照下圖操作。
1.核取此項
3.核取「員工編號」
和「姓名」欄位
2.選取「員工基本
資料」資料表
4.自動產生的SQL查詢
顯示在此
5.按
[
下一步]
15-10
網網網 頁頁頁 程程程 式式式 設設設 計計計
5. 出現 [測試查詢 ] 對話方塊,請點取 [測試查詢 ] 按鈕,看看是否能夠正確
的顯示資料庫資料,若沒問題,請按 [完成]。
6. 將 BulletedList 控制項拖曳至網頁,然後將之選取,點按其右上角的 [智
慧標籤] 按鈕,在出現的功能表中選取 [選擇資料來源]。
1. 選取 BulletedList 控制項 2. 點按此鈕
3. 選按 [設定資料來源]
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" 的資料來源控制項。
15-12
網網網 頁頁頁 程程程 式式式 設設設 計計計
9. 網頁執行結果如下。
接下來要為您介紹 SqlDataSource 控制項參數的使用方式,無論哪種 SQL 命令,
依照使用場合不同,常用的參數有 Parameter、ControlParameter、CookieParameter、
QueryStringParameter、SessionParameter。
Parameter 參數
Parameter 參數適用於參數值來自區域變數的值,或參數值為固定值的場合,
其屬性如下:
ConvertEmptyStringToNull="{True|False}":取得或設定當參數值為空字串時,
是否自動將參數值轉換為 Nothing。
DefaultValue="…":取得或設定參數的預設值,此預設值在參數值為 Nothing
時會自動成為參數值。
Direction="{Input|Output|InputOutput}":取得或設定參數的類型 (輸入參數、
輸出參數、輸入輸出參數),屬性值為 ParameterDirection 列舉所定義的類型。
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" />
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" />
15-15
111555 使用資料來源控制項存取資料庫
現在,我們來示範如何使用 QueryStringParameter 參數,假設要從 SampleDB 資料
庫的「零組件報價」資料表查詢符合查詢字串 type 指定之種類的「廠牌」欄位,
然後使用 CheckBoxList 控制項顯示資料,其執行結果如下所示:
請您也跟著一起做:
1. 建立名稱為 CheckBoxList.aspx 的新網頁,然後在工具箱的 [資料] 索引標籤
內找到 [SqlDataSource] 控制項並按兩下。
2. [SqlDataSource] 控制項出現在網頁中,請將之選取,然後點按其右上角的
[智慧標籤] 按鈕,在出現的功能表中選取 [設定資料來源]。
當查詢字串 type 省略時,顯示零組件種類為「主機板」的所有廠牌。
當查詢字串 type等於CPU時,顯示零組件種類為「CPU」的所有廠牌。
15-16
網網網 頁頁頁 程程程 式式式 設設設 計計計
3. 出現 [選擇資料連接] 對話方塊,請將 [您的應用程式應該使用哪個資料連接
來連接資料庫] 欄位設定為 Web.config 中設定的 SampleDB 資料連接,然後
按 [下一步]。
4. 依照下圖操作。
3.核取「廠牌」欄位
2.選取「零組件報價」資料表
1.核取此項
自動產生的SQL
查詢顯示在此
5.點按此鈕
4.核取此項表示不
抓取重複的資料
15-17
111555 使用資料來源控制項存取資料庫
5. 出現如下對話方塊供您指定 Where 條件,請依照下圖操作。
6. 參數設定如下,請按 [確定]。
1. 指定排序欄位
2. 設定為「=」
3. 指定參數類型
6. 按 [加入]
5. 參數預設值為 “主機板”
4. 設定參數值來自type 查詢字串的值
15-18
網網網 頁頁頁 程程程 式式式 設設設 計計計
7. [Select 陳述式] 欄位會顯示自動產生的 SQL 命令,請按 [下一步]。
請注意,上圖的 [ORDER BY] 按鈕可以設定資料的排序方式,但是當核取
[只傳回不重複的資料列 ] 選 項 時 , 將 無 法 使 用 排 序 功 能 ; 此 外 , 若 要
SqlDataSource 控制項自動產生 Insert、Update、Delete 等陳述式,資料行必
須包含主索引鍵,例如「編號」欄位,然後按 [進階],再於如下對話方塊
中核取 [產生 INSERT、UPDATE 和 DELETE 陳述式] 即可。
15-19
111555 使用資料來源控制項存取資料庫
8. 出現 [測試查詢] 對話方塊,請按 [測試查詢]。
9. 出現 [參數值編輯器] 對話方塊,請輸入型別、DbType 及參數值,然後按 [確
定]。
10. 查詢結果如下,請按 [完成]。
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 ([零組件種類] = @零組件種類)">
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 屬性指定資料來源。
15-22
網網網 頁頁頁 程程程 式式式 設設設 計計計
15-3 LinqDataSource 控制項 LinqDataSource 控制項可以用來簡化 LINQ to SQL 的過程,讓您不需撰寫任何
LINQ 查詢喔!
現在,我們來示範如何使用 QueryStringParameter 參數,假設要從 SampleDB 資料
庫的「零組件報價」資料表查詢符合查詢字串 type 指定之零組件種類的資料,
然後使用 GridView 控制項顯示資料,其執行結果如下所示。
當查詢字串type
省略時,顯
示零組件種類為「主機板」
的所有資料。
當查詢字串
type
等於
CP
U
時,顯示零組件種類
為「C
PU
」的所有資料。
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.按
[
加入]
15-24
網網網 頁頁頁 程程程 式式式 設設設 計計計
3. 得到如下結果,LINQ 與 SQL Server 資料庫之間的 Mapping 建立完成,自動
產生的程式碼均儲存在 Price.designer.vb。
4. 建立名稱為 LinqDataSource.aspx 的新網頁,然後在工具箱的 [資料] 索引標
籤內找到 [LinqDataSource] 控制項並按兩下。
5. [LinqDataSource] 控制項出現在網頁中,請將之選取,然後點按其右上角
的 [智慧標籤] 按鈕,在出現的功能表中選取 [設定資料來源]。
15-25
111555 使用資料來源控制項存取資料庫
6. 將 [選擇您的內容物件] 欄位設定為 PriceDataContext,然後按 [下一步]。
7. 依照下圖操作。
2.核取「*
」,表示抓
取所有欄位。
3.點取此鈕
1.選
取
「
零
組
件
報
價(Table<
零組件報價>)」
資料表
15-26
網網網 頁頁頁 程程程 式式式 設設設 計計計
8. 出現如下對話方塊供您指定 Where 運算式,請依照下圖操作。
9. 參數設定如下,請按 [確定]。
1. 指定篩選欄位
2. 設定為「==」
3. 指定參數類型
6. 按 [加入]
5. 參數預設值為 “主機板”
4. 設定參數值來自type 查詢字串的值
15-27
111555 使用資料來源控制項存取資料庫
10. 回到 [設定資料選取範圍] 對話方塊,請按 [完成]。
這個對話方塊中尚有 [OrderBy] 和 [進階] 兩個按鈕,其功能如下:
[OrderBy]:點按此鈕可以設定資料的排序方式。
[進階]:若要 LinqDataSource 控制項可以對 SQL Server 資料庫進行新增、
更新及刪除等動作,必須在步驟 7. 勾選「*」,表示抓取資料表的所
有欄位,然後按 [進階],再核取如下對話方塊中的三個選項即可。
11. 在工具箱的 [資料] 索引標籤內找到 [GridView] 控制項,將之拖曳至網頁
並加以選取,然後點按其右上角的 [智慧標籤] 按鈕,在 [選擇資料來源 ]
欄位中選取「LinqDataSource1」。
1. 插入並選取 GridView 控制項
2. 點按此鈕
3. 選擇資料來源
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>