首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# DBHelp 類找不到:第三方封裝類需引用 DLL 或複製源碼

     編輯:程式設計綜合問答

錯誤訊息

The name 'DBHelp' does not exist in the current context

原因

`DBHelp` **不是 .NET 框架內建類別**,而是開發者/團隊/網路教程自行封裝的**資料庫操作輔助類** (Helper/Utility)。常見來源:

  • 企業內部基礎庫 DLL。
  • 網路下載的教程源碼 (如 `DBHelper.cs`)。
  • NuGet 套件 (如 `Dapper`、`SqlSugar`、`FreeSql` 等 ORM 內建的 Helper)。

解決方案

情況操作步驟
專案已有 DLL右鍵專案 → Add Reference → Browse 選中 `Common.dll` / `DataAccess.dll` 等 → 確定。
頂部 `using Common.Data;` (視命名空間而定)。
網路複製代碼在專案新建 `DBHelper.cs`,貼上完整代碼,修正命名空間為當前專案。
確保引用 `System.Data`、`System.Data.SqlClient` / `Microsoft.Data.SqlClient`。
使用成熟 ORMNuGet 安裝 `Dapper` / `SqlSugar` / `FreeSql` / `EntityFrameworkCore`。
直接使用其 API,無需自寫 Helper。

最小可用 DBHelper 範例 (ADO.NET 核心)


using System;
using System.Data;
using System.Data.SqlClient; // 或 Microsoft.Data.SqlClient
using System.Collections.Generic;

public static class DBHelper {
    static readonly string ConnStr = "Server=.;Database=TestDB;Uid=sa;Pwd=123;TrustServerCertificate=True;";
    
    // 執行非查詢 (增刪改)
    public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) {
        using (var conn = new SqlConnection(ConnStr))
        using (var cmd = new SqlCommand(sql, conn)) {
            if (parameters != null) cmd.Parameters.AddRange(parameters);
            conn.Open();
            return cmd.ExecuteNonQuery();
        }
    }
    
    // 執行標量查詢 (單值)
    public static object ExecuteScalar(string sql, params SqlParameter[] parameters) {
        using (var conn = new SqlConnection(ConnStr))
        using (var cmd = new SqlCommand(sql, conn)) {
            if (parameters != null) cmd.Parameters.AddRange(parameters);
            conn.Open();
            return cmd.ExecuteScalar();
        }
    }
    
    // 執行讀取器 (流式讀取)
    public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters) {
        var conn = new SqlConnection(ConnStr); // 注意:連接由調用者負責關閉
        var cmd = new SqlCommand(sql, conn);
        if (parameters != null) cmd.Parameters.AddRange(parameters);
        conn.Open();
        // CommandBehavior.CloseConnection: 讀取器關閉時自動關閉連接
        return cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }
    
    // 填充 DataTable (小數據量)
    public static DataTable GetDataTable(string sql, params SqlParameter[] parameters) {
        using (var conn = new SqlConnection(ConnStr))
        using (var adapter = new SqlDataAdapter(sql, conn)) {
            if (parameters != null) adapter.SelectCommand.Parameters.AddRange(parameters);
            var dt = new DataTable();
            adapter.Fill(dt);
            return dt;
        }
    }
}

使用範例


// 參數化查詢防注入
var dt = DBHelper.GetDataTable("SELECT * FROM Users WHERE Age > @age", new SqlParameter("@age", 18));
foreach (DataRow row in dt.Rows) Console.WriteLine(row["Username"]);

// 執行更新
int rows = DBHelper.ExecuteNonQuery("UPDATE Users SET LastLogin=GETDATE() WHERE UserID=@id", new SqlParameter("@id", 1001));

// 讀取器模式 (大數據量)
using (var reader = DBHelper.ExecuteReader("SELECT * FROM Logs")) {
    while (reader.Read()) { /* 處理 */ }
}

避坑指南

  • **連接字串**放在 `appsettings.json` / `web.config` / `App.config` 中,勿硬編碼。
  • **參數化查詢** (`@param` + `SqlParameter`) 是防 SQL 注入的唯一正確方式,拼接字串**嚴禁**。
  • `ExecuteReader` 返回的 `SqlDataReader` **必須在 `using` 塊中使用**,確保連接釋放。
  • 生產環境請使用 **連接池** (ADO.NET 預設開啟) 與 **異步方法** (`ExecuteNonQueryAsync` 等) 提升吞吐。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved