成年人就自己查一下,上課時間也短, 11/17 也是自己看的筆記,寫錯就是我的錯,你沒錯,感恩
我學的方式是下課查詢每行程式打啥,寫中文...
---
ADO.NET是微軟在.NET Framework中負責資料存取的類別庫集, ActiveX Data Objects (ADO) ,它可以讓.NET上的任何程式語言能夠連接並存取關聯式資料庫,
與非資料庫型資料來源(例如XML,Excel或是文字檔資料),或是獨立出來作為處理應用程式資料的類別物件。
由連線資料來源(connected data source)以及離線資料模型(disconnected data model)兩個部份構成
上課直接用vs2022建立windows Forms APP,天氣冷今天特別想睡,一整天新增錯專案範本,後來做CRUD顯示不出來

回家重新做一次有成功執行,要早睡
就像打開一個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變更部分欄位
請先 登入 以發表留言。