首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET Web Pages Database 資料庫操作完整 API 參考

     編輯:ASP.NET 基礎

ASP.NET Web Pages - Database 物件完整 API 參考與最佳實務


Database 物件提供輕量級 ADO.NET 封裝,簡化 SQL 執行、參數化查詢、連線管理,適合中小型專案快速開發。


Database 核心方法完整參考

方法回傳值描述適用場景
Database.Execute(SQL, params)Int (影響列數)執行 INSERT/UPDATE/DELETE/Stored Procedure資料異動操作
Database.GetLastInsertId()Int/Long取得最後插入資料的身分識別欄位值自動遞增主鍵取得
Database.Open(filename)Database開啟資料庫連線 (使用 Web.config 連線字串名稱或 .sdf 檔案路徑)建立連線
Database.OpenConnectionString(connStr)Database直接使用連線字串開啟連線動態連線字串
Database.Query(SQL, params)IEnumerable<dynamic>執行 SELECT 查詢,回傳動態物件集合多筆資料讀取
Database.QuerySingle(SQL, params)dynamic查詢單筆資料,無資料回傳 null單筆資料讀取
Database.QueryValue(SQL, params)Object查詢單一純量值 (COUNT、MAX、SUM 等)統計彙總查詢

連線字串配置:Web.config

<connectionStrings>
 <add name="DefaultConnection"
 connectionString="Data Source=|DataDirectory|\AppData.sdf;Password=secret"
 providerName="System.Data.SqlServerCe.4.0" />
 <add name="SqlServerConnection"
 connectionString="Server=.;Database=MyDb;User Id=sa;Password=pwd;TrustServerCertificate=True"
 providerName="System.Data.SqlClient" />
</connectionStrings>

使用方式:var db = Database.Open("DefaultConnection");


參數化查詢:防止 SQL Injection 的關鍵

// ✅ 正確:參數化查詢
var sql = "SELECT * FROM Products WHERE CategoryId = @0 AND Price > @1";
var products = db.Query(sql, categoryId, minPrice);

// ✅ 正確:具名參數 (較易讀)
var sql = "SELECT * FROM Users WHERE Email = @email AND IsActive = @active";
var user = db.QuerySingle(sql, new { email = "user@example.com", active = true });

// ❌ 錯誤:字串串接 (SQL Injection 風險)
var sql = "SELECT * FROM Users WHERE Email = '" + email + "'";

參數佔位符:@0, @1, @2... (位置) 或 @paramName (具名)。


完整 CRUD 實作範例

Create - 新增資料

var sql = @"INSERT INTO Products (Name, Price, CategoryId, CreatedDate)
 VALUES (@0, @1, @2, @3)";
var result = db.Execute(sql, "New Product", 299.99, 5, DateTime.Now);
var newId = db.GetLastInsertId();

Read - 查詢資料

// 多筆查詢
var products = db.Query("SELECT * FROM Products WHERE CategoryId = @0", catId);
foreach (var p in products) { /* p.Name, p.Price 存取 */ }

// 單筆查詢
var product = db.QuerySingle("SELECT * FROM Products WHERE Id = @0", id);

// 純量查詢
var count = db.QueryValue("SELECT COUNT(*) FROM Products WHERE CategoryId = @0", catId);
var maxPrice = db.QueryValue("SELECT MAX(Price) FROM Products");

Update - 更新資料

var sql = "UPDATE Products SET Price = @0, UpdatedDate = @1 WHERE Id = @2";
var rows = db.Execute(sql, 349.99, DateTime.Now, productId);

Delete - 刪除資料

var rows = db.Execute("DELETE FROM Products WHERE Id = @0", productId);

資源管理與連線釋放

Database 物件實作 IDisposable,建議使用 using 區塊確保連線正確釋放:

using (var db = Database.Open("DefaultConnection")) {
 var products = db.Query("SELECT * FROM Products");
 // 處理資料
} // 自動呼叫 Dispose(),關閉連線回連線池

進階:交易處理

using (var db = Database.Open("DefaultConnection")) {
 db.Execute("BEGIN TRANSACTION");
 try {
 db.Execute("UPDATE Accounts SET Balance -= @0 WHERE Id = @1", amount, fromId);
 db.Execute("UPDATE Accounts SET Balance += @0 WHERE Id = @1", amount, toId);
 db.Execute("COMMIT");
 } catch {
 db.Execute("ROLLBACK");
 throw;
 }
}

或使用 System.Transactions.TransactionScope 進行分散式交易。


遷移建議:現代專案請使用 Entity Framework Core / Dapper

  • EF Core:完整 ORM、LINQ 查詢、遷移、變更追蹤、關聯導航
  • Dapper:高效能 Micro-ORM、原生 SQL、強型別映射、延遲載入支援
  • Database 物件**:僅建議維護舊專案或極簡原型使用

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved