參考 ADO.NET - 維基百科,自由的百科全書

成年人就自己查一下,上課時間也短,  11/17 也是自己看的筆記,寫錯就是我的錯,你沒錯,感恩

我學的方式是下課查詢每行程式打啥,寫中文...

---

ADO.NET是微軟在.NET Framework中負責資料存取的類別庫集, ActiveX Data Objects (ADO) ,它可以讓.NET上的任何程式語言能夠連接並存取關聯式資料庫,

與非資料庫型資料來源(例如XML,Excel或是文字檔資料),或是獨立出來作為處理應用程式資料的類別物件。

由連線資料來源(connected data source)以及離線資料模型(disconnected data model)兩個部份構成

上課直接用vs2022建立windows Forms APP,天氣冷今天特別想睡,一整天新增錯專案範本,後來做CRUD顯示不出來

ADO.NET 資料存取的類別庫集(.NET Framewo

回家重新做一次有成功執行,要早睡

就像打開一個Excel檔案(像是資料集), 裡面有很多工作表(像是資料表):

DataSet資料集

DataTable資料表

---

痛苦的行列

程式設計是Column行是直,Row列是橫。

台中文相反一行橫字, 一列隊伍。

記憶點:一列橫的火車

---

開這種工具箱有夢回做VBA時期,只是當時看不懂

先利用這幾個方法,來理解鎖和讀取...
.Fill(); //填充
.Update(); //更新
.WriteXml(,); //寫入
.ReadXml(,); //讀取

---

老師講的併行性和併行控制,比較偏用數值去加減, 或是從資料庫插隊和演示錯誤題示, 開關鎖來講解

到這裡 我聽不太懂, 自己查詢和理解

參考

並行控制 - 維基百科,自由的百科全書

樂觀並行控制 - 維基百科,自由的百科全書

樂觀並行控制(又名「樂觀鎖」,Optimistic Concurrency Control,縮寫「OCC」)是一種並行控制的方法。

它假設多使用者並行的交易在處理時不會彼此互相影響,各交易能夠在不產生鎖的情況下處理各自影響的那部分資料。

---

AcceptChange

1.不會動到資料庫,在記憶體操作,認可變更後是新值取代舊值。

2.因為在其他不是寫C#的地方,我被插隊寫入資料庫,到visual studio要update會被除錯說

System.Data.DBConcurrencyException (資料庫並行例外狀況)

3.接受目前的狀態 (AcceptChanges),才能夠根據這個狀態進行下一個正確的手動計算或寫入動作。

4.或是我新增一行,但我不想寫入資料庫。只是在前端做臨時計算。

RejectChanges

舊值取代新值, Cacel 取消 RejectChanges 拒絕變更,移除資料列

---
.ExecuteNonQuery(); 執行 非查詢 的 SQL 命令。傳回受影響的資料列數量
.ExecuteReader(); 執行 SQL 查詢, 並返回結果集 多行多列 的資料。

-->使用while迴圈(x.Read())逐行讀取, 多個查詢搭配.NextResult();移動到下一個結果集

.ExecuteScalar(); 執行 SQL 查詢, 並只返回結果集 第一行第一列 的資料。

---

Delete 和 RemoveAt 差別

---

PositionChanged 事件 觀察綁定來源變化

檔案載入前做安全檢查

---

Integrated Security 整合安全 True 是Windows驗證, False要有UserID和Password

---

Pooling=False;共享連接,
True 不每次都建立新連線
False 關閉連線池(每次連線都建立新的連線)

---11/20
後面還沒整理好, 對應工具箱元件背後的原理, 自己的簡單筆記和理解, 我記憶力很差

類型分為值類型(Int)和參考類型(SqlConnection)

類別是參考類型的具體實現 | 類型 物件參考 = 物件參考指向實例 new SqlConnection()

SqlConnection cn = new SqlConnection();

物件參考是傳參考, 雖然長得和傳址很像

傳址是可用ref修改變數指向的物件

傳參考能改內容, 不能改變數指向的物件

---

參數化查詢 (Parameterized Query) @
防止 SQL 隱碼攻擊 (SQL Injection) {}
SqlConnection 

SqlCommand

---

處理併發性

交易隔離等級

所有隔離等級,寫入都會取得獨佔鎖

併發性與交易隔離等級 (Transaction Isolation Level)
讀取未提交 Read Uncommitted
讀取已提交 Read Committed
可重複讀 Repeatable Read
序列化 Serializable

以下AI

寫入 (INSERT/UPDATE/DELETE)

寫入時會加 X 鎖(排他鎖)

其他交易的 S 鎖或 X 鎖會被阻塞直到 COMMIT / ROLLBACK

隔離等級 特性 可讀取到的資料 S/X 鎖行為
Read Uncommitted 最低隔離 可以讀取未提交資料 → 可能髒讀 讀不加 S 鎖,可用 NOLOCK
Read Committed (預設) 讀已提交資料 只能讀已提交資料 讀時加 S 鎖,寫時加 X 鎖,S 鎖在語句結束釋放
Repeatable Read 可重複讀 讀到的資料在交易中不被其他交易修改 讀時加 S 鎖,保持到交易結束,寫時加 X 鎖
Serializable 串行化 交易完全串行化,避免幻讀 在範圍上加 S/X 鎖,保持到交易結束
Snapshot 版本快照 讀取快照版本,不會被阻塞 不加鎖,讀取歷史版本

---

以下AI

控制鎖的行為

鎖提示 功能 用法範例
WITH (NOLOCK) 不加鎖,可能髒讀 SELECT * FROM products WITH (NOLOCK)
WITH (XLOCK) 讀/寫資料時加 X 鎖 SELECT * FROM products WITH (XLOCK)
WITH (HOLDLOCK) 將鎖持續到交易結束,相當於 Serializable SELECT * FROM products WITH (XLOCK,HOLDLOCK)
WITH (UPDLOCK) 加 Update 鎖,用於先讀再寫,防止死鎖 SELECT * FROM products WITH (UPDLOCK)
WITH (ROWLOCK) 強制行級鎖 SELECT * FROM products WITH (ROWLOCK)
WITH (PAGLOCK/ TABLOCK) 強制頁鎖/表鎖 SELECT * FROM products WITH (TABLOCK)

 

---

以下AI

鎖的持續時間影響併發性與阻塞行為:

鎖類型 持續時間
S 鎖 (Shared) RC:語句結束釋放;RR / Serializable:交易結束釋放
X 鎖 (Exclusive) 交易結束釋放(UPDATE/DELETE/INSERT)
XLOCK + HOLDLOCK SELECT 時加 X 鎖並保持到交易結束
意圖鎖 (Intent Lock) 保護鎖層級,不阻塞,但協助階層鎖檢查

 

___

Vs2022  c#

EDM實體資料模型

還沒學到LinQ

比較修改更新一個欄位

哪種方法比較有效率,Update和Find+SaveChange

Update更新整張表的欄位,Find+SaveChange變更部分欄位

 

 

 

創作者介紹
創作者 2026年羽水記事本 的頭像
羽水

2026年羽水記事本

羽水 發表在 痞客邦 留言(0) 人氣( 1 )