深入探索.NET資料存取:ADO.NET + SqlDataSource + LINQ(第二版) | 被動收入的投資秘訣 - 2024年8月
![](https://www.books.com.tw/img/001/088/77/0010887715.jpg)
深入探索.NET資料存取:ADO.NET + SqlDataSource + LINQ(第二版)
本書是針對「已經會寫」資料庫程式的程式設計師所設計的案頭書,當遇到資料存取相關問題時可以隨時拿出來查閱。不光是知道這些方法、屬性是什麼(名詞解釋)?更有範例可以直接套用、學習與解惑(不只是What,更要會動手寫,知道怎麼做How To Do)。
◈以微軟Microsoft Doc(前MSDN)網站為基礎,介紹最常用、次常用的屬性與方法之實務應用。
◈除了ASP.NET(Web Form)網頁,也搭配Windows Form的ADO.NET程式,演示跨平台資料存取。部分章節更提供ASP.NET MVC 5的範例。
◈以.NET Framework為主,DataReader與SqlCommand、DataSet與SqlDataAdapter屬性與方法。
◈EntLib企業函式庫(Enterprise Library)的資料存取(DAAB),快速整合DataReader與DataSet兩種寫法。
◈開放式並行存取(Optimistic Concurrency)、.NET 2.0~4.x的非同步(Async.與Await)程式。
◈撰寫分頁程式,搭配SQL Server資料庫的Row_Number、Offset…Fetch Next,實踐資料來源的分頁展示。
◈Web Service與WCF Service搭配jQuery、JSON,做出Facebook無限下拉的資料呈現(AJAX分頁程式)。
◈System.Transactions命名空間、TransactionScope與資料庫交易、SqlBulkCopy。
◈SqlParameter參數避免資料隱碼(SQL Injection)攻擊。
◈ASP.NET Web Form專用的SqlDataSource控制項的解說與剖析。
◈LINQ與ADO.NET、LINQ語法介紹。
☞【範例檔下載網址:reurl.cc/E2baEm】☜
作者簡介
周棟祥 博士
現職:國立高雄科技大學 資訊管理學系副教授兼教育事業暨產品推廣處處長
學歷:
國立政治大學 資訊管理博士(2004/09~2008/02)
國立中正大學 資訊管理碩士(1999/09~2001/07)
研習:
德國阿亨工業大學(RWTH AACHEN University)
新加坡國立大學(National University of Singapore)
新加坡南洋理工大學(Nanyang Technological University)
經歷:
企業整合中心主任
研究發展處副研發長
區域產學合作中心主任
研究發展處推廣教育中心主任
研究發展處產學組組長
區域產學合作中心執行長
研究發展處推廣服務及教育組組長
管理學院院長特別助理
中華電信助理研究員
專長領域:服務科學、客戶關係管理、電信營運管理、電子商務、行動服務、工業4.0、物聯網與大數據應用
吳進魯
學歷:國立屏東科技大學 資訊管理研究所碩士
經歷:
(1)1998~2000年為國立屏東科技大學計算機中心、屏東縣教育局舉辦的多場資訊教育訓練擔任講師(授課時數超過250小時)。
(2)國防役四年。資策會各式網站系統開發(七年經驗)、電信產業分析與Internet指標研究工作。
(3)資策會 教育訓練中心(南區)專任講師(專長Web程式設計)。負責600小時之就業輔導班。
(4)星動計畫B2Bi(XML資料交換,採用RosettaNet標準),VB 6.0與MS BizTalk Server系統開發與維護。客戶為國內電子業十大股票上市公司。
(5)任職於國內某資通大廠(全球資訊業百大公司),負責軟體技術規劃與系統整合。
(6)2008/4/1~2017/7/1榮獲MVP(微軟最有價值專家),專長ASP.NET。
(7)2010~2012年台中市電腦公會辦理 行政院勞委會職訓局 產業人才投資計畫,擔任ASP.NET專任講師。2015年起投入線上教學(遠距教學)並提供ASP.NET(WebForm與MVC)教學影片,讓學員線上學習。
著作:
(1)2001至今已出版十多本電腦書籍。網站提供許多PDF電子書,免費分享Linux與ASP.NET知識。
(2)國內第一本推出Mandrake Linux,以及優先採用Visual Studio開發ASP.NET(1.x版)的電腦書作者。兩者均開創了台灣電腦書的新領域,並帶動新風潮。台灣少數自.NET 1.0~ 4.8版均有出書的資深作者,並發行簡體中文版至中國大陸。
(3)台灣第一本.NET 4.0與4.5的中文電腦書作者,4.0版創記錄熱銷八刷。
|CHAPTER 00| 本書導讀
0-1 學習順序,三大重點
0-2 ADO.NET四大經典範本
0-3 資料庫範例的安裝與YouTube教學影片
0-4 參考資料與書籍
Part I ADO.NET基礎入門篇
|CHAPTER 01| 程式與資料庫互動的四大步驟
1-1 ASP.NET與ADO.NET的簡單程式(DataReader)
1-2 JSP連結資料庫的四大步驟
1-3 PHP連結資料庫的四大步驟
1-4 深入瞭解四大步驟
1-5 連結字串(ConnectionString)不需死背
1-6 新的Microsoft.Data.SqlClient命名空間(.NET Core)
|CHAPTER 02| Connection資料庫連結
2-1 Connection物件
2-2 ConnectionString,資料庫的連結字串
2-3 ConnectionString關鍵字數值的有效名稱
2-4 SqlDataSource產生連結字串(圖解Visual Studio精靈)
2-5 Web.Config檔案的連結字串
2-6 SqlDataSource資料庫連結字串for Oracle
2-7 SqlDataSource資料庫連結字串for Access
2-8 SqlDataSource資料庫連結字串for ODBC
2-9 .Open()方法
2-10 .Close()方法
2-11 .Dispose()方法
2-12 .CreateCommand()方法
2-13 .GetSchema()方法
2-14 多重結果作用集(MARS,MultipleActiveResultSets)
2-15 變更與取得資料庫
2-16 連結字串的安全性
2-17 連結字串與資料庫交易(Transaction)
|CHAPTER 03| SQL Server連結共用(Connection Pooling)
3-1 集區(Pool)的建立及指派
3-2 Case Study:ClientConnectionId屬性
3-3 從集區加入連結
3-4 從集區移除連結
3-5 清除連結集區
|CHAPTER 04| Azure雲端資料庫、SQL Server的LocalDb、Oracle或MySQL資料庫
4-1 連結雲端資料庫(Microsoft Azure)
4-2 SQL Server的LocalDB與範例安裝
4-3 Oracle甲骨文資料庫
4-4 SqlDataSource與Oracle
4-5 MySQL資料庫
4-6 SqlDataSource控制項搭配MySQL
Part II DataReader篇
|CHAPTER 05| SqlDataReader類別與常用方法,程式入門
5-1 DataReader觀念解析
5-2 DataReader的方法
5-3 .Read()方法
5-4 入門練習(I):實作DataReader與範例
5-5 Snippet,Visual Studio輔助您撰寫「程式碼片段」
5-6 入門練習(II):Inline Code,程式與畫面在同一檔案
5-7 先關閉Command再關閉DataReader
5-8 DataReader優缺點—快速又省資源、但無法分頁
5-9 使用try...catch...finally區塊
5-10 使用using...區塊,自動關閉資源
5-11 巢狀的(多個)using區塊
5-12 SQL指令的預存程序(Stored Procedure)
5-13 .NextResult()方法,傳回多個結果
5-14 多重結果作用集(MARS)與網路留言版(關聯式資料表)
5-15 Case Study:計算食物卡路里,.ExecuteScalar()方法
5-16 Case Study:計算食物的卡路里(可複選、加總)
|CHAPTER 06| DataReader常用屬性
6-1 DataReader的屬性
6-2 Depth屬性
6-3 FieldCount屬性
6-4 HasRows屬性
6-5 RecordsAffected屬性,資料異動
6-6 .GetName()方法,取得欄位名稱
6-7 .GetValue()方法,個別擷取欄位的內容、值
6-8 .GetValues()方法,填入物件陣列,有效擷取「所有」欄位
6-9 .GetOrdinal()方法,為了效能只能呼叫一次
6-10 .IsDBNull()方法,避免空的欄位值
|CHAPTER 07| SqlCommand類別
7-1 SqlCommand建構函式與初始屬性值
7-2 SqlCommand與DataReader基礎範本
7-3 SqlCommand常用方法一覽表
7-4 .ExecuteReader()方法,查詢資料列(記錄)
7-5 .ExecuteReader(CommandBehavior)方法,查詢資料列(記錄)
7-6 .ExecuteNonQuery()方法,回寫資料庫(新增、刪除、修改)
7-7 例外狀況
7-8 SqlCommand的屬性
7-9 參數(Parameters)與SqlParameter Collection,避免SQL Injection攻擊
Part III DataSet篇
|CHAPTER 08| DataSet(資料集)+ DataAdapter(資料配接器)
8-1 Web網頁與Windows程式,使用DataSet的差異
8-2 何時該用DataReader或DataSet?
8-3 DataSet是一種「離線」的資料存取
8-4 DataSet的流程與範例程式
8-5 SQL Server連結字串(ConnectionString)
8-6 DataTable與DataRow
8-7 使用using...區塊
8-8 Case Study:將DataSet轉成XML檔案(I)
8-9 Case Study:將DataSet轉成XML檔案(II)
8-10 Relations屬性
8-11 總複習,DataAdapter的.Fill()與.Update()方法
|CHAPTER 09| DataTable與DataView
9-1 DataTable,存放在記憶體中關聯式資料的「資料表」
9-2 實作DataTable與範例
9-3 將DataColumn(資料行、欄位)加入DataTable
9-4 將DataRow(資料列、記錄)加入DataTable
9-5 多個DataAdapter將不同資料來源加入DataSet
9-6 DataView,自訂資料檢視
9-7 實作DataView與範例
9-8 尋找資料列,DataView的.Find()方法和.FindRows()方法
|CHAPTER 10| DataAdapter與SqlDataAdapter類別
10-1 簡介DataAdapter(資料配接器)物件
10-2 入門練習(I),DataAdapter與DataSet範例實作
10-3 入門練習(II),SqlDataAdapter兩大方法
10-4 SqlDataAdapter的建構函式
10-5 MissingMappingAction與MissingSchemaAction屬性
10-6 SqlDataAdapter的四個Command
10-7 DataAdapter各種Command與參數的寫法
10-8 TableMappings屬性
10-9 UpdateBatchSize屬性,批次處理大量的SQL命令
10-10 .Fill()方法
10-11 Case Study:將查詢結果「分頁」展示(DataSet版)
10-12 .Update()方法,資料異動
10-13 DataAdapter的三個事件
Part IV ADO.NET整合範例篇
|CHAPTER 11| 跨平台ADO.NET範例(Windows Form/.exe執行檔)
11-1 Windows Form寫法(I)─基礎篇
11-2 Windows Form寫法(II)─在App.Config檔的連結字串
11-3 編譯後的.exe檔案在哪裡?
11-4 重點複習與影片教學
|CHAPTER 12| 自訂分頁(Paging),自己寫程式做「分頁」
12-1 分頁程式(DataSet基礎入門版)
12-2 分頁(DataSet進階版)每十頁區隔
12-3 每十頁間隔,易出錯的地方與效能瓶頸
12-4 Case Study:DataReader分頁+SQL 2005(ROW_NUMBER)
12-5 Case Study:DataReader分頁+SQL 2012(OFFSET...FETCH Next...)
12-6 Case Study:搭配其他控制項(Repeater或GridView)
12-7 GridView自訂分頁(.NET 4.5起才有)AllowCustomPaging與VirtualItemCount
|CHAPTER 13| 分頁優化與最佳化,StringBuilder、SQL指令、MVC的LINQ分頁
13-1 該用String或StringBuilder?用對了讓程式更有效率
13-2 微軟Microsoft Docs網站範例,傳統SQL指令的TOP與Where
13-3 T-SQL指令的分頁優化,TOP、ROW_NUMBER與OFFSET-FETCH三者差異
13-4 LinqDataSource控制項,內建資料分頁
13-5 ASP.NET MVC的LINQ分頁範例
|CHAPTER 14| ASP.NET Core與ADO.NET簡易入門
14-1 開放原始碼的ASP.NET Core
14-2 新增專案,ASP.NET Core Web Application
14-3 ASP.NET Core的ADO.NET入門範例
14-4 連結資料庫(SqlConnection)
14-5 連結資料庫(appsettings.json裡的連結字串)
14-6 執行SQL指令,SqlCommand與DataReader
14-7 中文出現亂碼,如何解決?
14-8 「參數」的寫法,防範SQL Injection攻擊
14-9 ASP.NET Core的各種連結字串(各式資料庫)
|CHAPTER 15| 簡易入門ViewModel(小類別)與DAL、強型別來源物件
15-1 Case Study:搜尋引擎,簡單的ViewModel與類別檔
15-2 Case Study:強型別來源物件範例
15-3 EF與工具,快速產生類別檔
15-4 Web Form與Model Binding(附:教學影片)
|CHAPTER 16| ASP.NET MVC與ADO.NET
16-1 新增ASP.NET MVC專案(Project)
16-2 新增模組(Model)
16-3 控制器(Controller)
16-4 範例(I)–Create,資料新增
16-5 範例(II)–資料呈現,讀取與列表(檢視畫面的List範本)
16-6 範例(III)–新增資料(檢視畫面的Create範本)
16-7 課後補充與影片教學
|CHAPTER 17| GridView自己動手100%寫程式
17-1 HTML畫面設定
17-2 手動撰寫GridView各種功能(DataReader + SqlCommand)
17-3 手動撰寫GridView各種功能(DataSet + SqlDataAdapter)
|CHAPTER 18| 非同步(Async)ADO.NET程式設計
18-1 非同步程式設計概論
18-2 非同步執行(.NET 2.0).BeginExecute Reader()與.EndExecuteReader()方法
|CHAPTER 19| .NET 4.5起的非同步(Async)ADO.NET程式設計
19-1 觀念解析、重點提示
19-2 .NET 4.5起的「非同步」存取
19-3 非同步方法的傳回類型
19-4 .NET 4.5起的非同步程式設計
19-5 Case Study:範例解說
19-6 交易(Transaction)與非同步
19-7 多重結果作用集(MARS)與非同步
19-8 SqlClient資料流(Streaming)與非同步
19-9 Case Study:讀取SQL Server的資料流(BLOB、文字檔與XML檔)
19-10 Case Study:寫入SQL Server的資料流(BLOB、文字檔與XML檔)
|CHAPTER 20| 資料庫交易(Transaction)與SqlBulkCopy單一大量複製
20-1 Transaction,資料庫交易的觀念
20-2 TransactionScope類別,最簡單!
20-3 System.Transactions與SQL Server整合
20-4 CommittableTransaction類別與分散式交易SqlConnection的.EnlistTransaction()方法
20-5 System.Data.SqlClient命名空間的SqlTransaction類別
20-6 巢狀try...catch擷取例外狀況
20-7 效率之爭?誰快誰慢?
20-8 .NET 4.5起,非同步(Async)與資料庫交易
20-9 SqlDataSource控制項(Web Form)搭配Transaction
20-10 SqlBulkCopy單一批次大量複製(非交易)
20-11 SqlBulkCopy單一批次的大量複製(交易)
Part V ASP.NET的DataSource控制項篇
|CHAPTER 21| DataSource控制項,資料來源控制(只限Web Form可用)
21-1 IDataSource介面與資料來源(DataSource)控制項
21-2 資料來源控制項與資料繫結控制項
21-3 資料繫結(綁定)與.DataBind()方法
21-4 SqlDataSource的DataSource屬性
|CHAPTER 22| SqlDataSource類別(只限Web Form可用)
22-1 SqlDataSource控制項與精靈步驟
22-2 DataSource,資料來源控制項概觀
22-3 後置程式碼DataSourceID屬性與DataSource屬性,兩者不可混用
22-4 DataSourceMode設定為DataReader
22-5 DataSourceMode設定為DataSet
22-6 搭配「參數」避免資料隱碼攻擊,SqlParameters
22-7 InsertCommand。自己打造新增畫面,撰寫程式碼(.Insert()方法)
22-8 InsertCommand + InsertParameters(參數)
22-9 自己打造新增畫面,透過SqlDatasource精靈(幾乎不寫程式)
22-10 UpdateCommand + UpdateParameters(參數)
22-11 DeleteCommand + DeleteParameters(參數)
22-12 SqlDataSource的例外狀況(e.ExceptionHandled = true)
|CHAPTER 23| SqlDataSource範例集
23-1 新增、刪除、修改時,遇見空白則取消(e.Cancel =true)
23-2 .Select()方法-,自訂「輸出」畫面,手動呈現查詢的成果
23-3 FilterExpresssion(篩選條件運算式)與FilterParameters(參數)
23-4 SqlDataSource的快取
23-5 SqlCacheDependency屬性
23-6 SelectCommand+SelectParameters(參數),內部搜尋引擎
23-7 Case Study:SqlDataSource + CheckBoxList的搜尋功能
Part VI Parameter參數篇
|CHAPTER 24| 設定參數與資料型別、SqlParameterCollection類別
24-1 現學現賣,SqlCommand的參數寫法
24-2 現學現賣,SqlDataAdapter的參數寫法
24-3 Case Study:ParameterDirection屬性
24-4 參數的預留位置
24-5 參數的資料型別
24-6 不建議使用CommandBuilder
24-7 SqlParameterCollection類別
24-8 .Add()方法
24-9 .AddWithValue()方法
24-10 使用參數配合SqlCommand和預存程序
24-11 使用參數配合OleDbCommand
24-12 使用參數配合OdbcCommand
24-13 SqlDataAdapter使用參數
|CHAPTER 25| 站內的搜尋引擎(I)─基礎入門
25-1 單一欄位的搜尋(Web Form)
25-2 多重欄位的搜尋(Web Form、觀念解說)
25-3 自己寫程式「多重欄位的搜尋」(Web Form)
25-4 多重欄位的搜尋(DataSet版,搭配SelectCommand參數)
25-5 自己動手寫(50%SqlDataSource)搜尋功能
25-6 自己動手寫(100%SqlDataSource)搜尋功能
25-7 單一欄位的搜尋(ASP.NET MVC)
25-8 自己寫程式「多重欄位的搜尋」(ASP.NET MVC)
|CHAPTER 26| 站內的搜尋引擎(II)─範例改寫基礎入門
26-1 用CheckBoxList輸入「複選」搜尋條件
26-2 微軟範例,String.Join()方法
26-3 Case Study:將方法與資料表抽離,寫成類別檔
Part VII 補充案例篇
|CHAPTER 27| 開放式並行存取(Optimistic Concurrency)
27-1 封閉式並行存取
27-2 開放式並行存取
27-3 範例演練,Case Study
27-4 以SQL指令測試開放式同步存取之違規
27-5 DataAdapter的RowUpdate三大事件
|CHAPTER 28| 企業函式庫Enterprise Library 6.0的DAAB
28-1 EntLib的沿革與特點
28-2 安裝EntLib與Visual Studio加入參考
28-3 入門(I),DAAB存取資料庫
28-4 入門(II),資料庫的連結
28-5 入門(II),撰寫DataReader的程式
28-6 DataReader與參數
28-7 入門(III),撰寫DataSet的程式
28-8 DataSet與參數
28-9 EntLib的原始碼(源碼)
28-10 DAAB與ADO.NET寫法的差異?
28-11 深入剖析DAAB存取資料的方法
28-12 建立與執行Accessor,以「物件」傳回資料
28-13 接收XML資料,僅限MS SQL Server使用
28-14 取得單一純量的值,Scalar Value
Part VIII LINQ篇
|CHAPTER 29| LINQ與ADO.NET
29-1 LINQ-to-DataSet
29-2 LINQ-to-SQL
|CHAPTER 30| LINQ語法簡介與實戰
30-1 查詢(Query)
30-2 資料來源
30-3 類型的關聯性與轉換
30-4 好料下載,LINQ–Query Samples
30-5 Case Study與各種查詢語法
30-6 Lambda運算式
30-7 聯結(join)