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

Hxj.Data 直接 SQL 執行:FromSql、參數化、DbParameter 陣列與鏈式 AddInParameter

     編輯:關於ASP.NET

FromSql:回歸 SQL 本質,參數化防注入

簡單查詢

DbSession.Default.FromSql("SELECT * FROM Products").ToDataTable();

單一參數:AddInParameter

DbSession.Default.FromSql("SELECT * FROM Products WHERE ProductID = @pid")
    .AddInParameter("@pid", DbType.Int32, 1)
    .ToDataTable();

注意:SQL 中參數名**必須唯一**,否則會被全部取代(如 WHERE ProductID = ProductID 會變 WHERE @ProductID = @ProductID)。

多參數:鏈式 AddInParameter(推薦)

DbSession.Default.FromSql("SELECT * FROM Products WHERE ProductID = @pid OR CategoryID = @cid")
    .AddInParameter("@pid", DbType.Int32, 1)
    .AddInParameter("@cid", DbType.Int32, 2)
    .ToDataTable();

多參數:DbParameter 陣列(底層控制)

DbParameter[] parameters = new DbParameter[2];
parameters[0] = DbSession.Default.Db.DbProviderFactory.CreateParameter();
parameters[0].ParameterName = "@pid"; parameters[0].DbType = DbType.Int32; parameters[0].Value = 1;
parameters[1] = DbSession.Default.Db.DbProviderFactory.CreateParameter();
parameters[1].ParameterName = "@cid"; parameters[1].DbType = DbType.Int32; parameters[1].Value = 2;

DbSession.Default.FromSql("SELECT * FROM Products WHERE ProductID = @pid OR CategoryID = @cid")
    .AddParameter(parameters)
    .ToDataTable();

非查詢執行:ExecuteNonQuery

int affected = DbSession.Default.FromSql("UPDATE Products SET UnitPrice = UnitPrice * 1.1 WHERE CategoryID = @cid")
    .AddInParameter("@cid", DbType.Int32, 1)
    .ExecuteNonQuery();

交易支援

DbTrans trans = DbSession.Default.BeginTransaction();
DbSession.Default.FromSql("DELETE FROM Logs WHERE LogDate < @cutoff")
    .AddInParameter("@cutoff", DbType.DateTime, DateTime.Now.AddMonths(-6))
    .SetDbTransaction(trans)
    .ExecuteNonQuery();
trans.Commit();

適用場景與警示

  • ✅ 複雜報表 SQL、資料庫特有語法(CTE、Window Functions、MERGE)、大量資料操作。
  • ✅ Legacy 專案逐步遷移:先用 FromSql 包裝既有 SQL,再逐步重構為 ORM 查詢。
  • ❌ 簡單 CRUD 濫用 FromSql → 喪失型別安全、重構支援、跨資料庫可攜性。
  • ❌ 動態拼接 SQL 字串 → SQL 注入風險、計畫快取失效。

FromSql 是 Hxj.Data 的「逃生艙」,提供參數化、交易、Provider 抽象等安全網,但請謹慎使用,核心業務優先用強型別查詢 API。

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