深入理解DbHelper類

一、DbHelper類怎麼調用

DbHelper是一個通用的數據庫操作類,可以用於各種不同的數據源,比如SQL Server、MySQL、Oracle等等。它是封裝ADO.NET操作的一個類,可以簡化常見的數據庫操作。我們在項目中使用DbHelper類來連接並操作數據庫。

DbHelper的調用方式非常簡單,我們只需要在需要用到它的文件中加入以下using語句:

using DbHelper;

之後就可以直接使用DbHelper類中的方法,比如連接數據庫、執行SQL語句並返回結果等等。

二、DbHelper用Model類

在操作數據庫時,我們通常會將數據庫中的表映射為一個個Model類,在代碼中使用Model類來操作數據庫。可以將DbHelper和Model類結合使用,提高開發效率。

在Model類中可以定義各種屬性和方法,用於操作數據庫中的數據。而在使用DbHelper類時,只需要通過它提供的方法連接數據庫、執行增刪改查等操作,並將結果存儲到Model類中,就可以對數據進行操作。

三、DbHelper類連接數據庫

DbHelper類提供了多種方法來連接數據庫,包括連接字符串和Connection對象。下面是通過連接字符串連接數據庫的示例:

string connectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=Demo;Integrated Security=True;";
DbHelper dbHelper = new DbHelper(connectionString);

在實例化DbHelper類時,我們需要傳入連接字符串作為參數。通過這個連接字符串,DbHelper就可以連接到指定的數據庫中並進行操作。

四、DbHelper使用教程

這裡是一個簡單的DbHelper使用教程,用於連接並操作SQL Server數據庫。我們需要將以下代碼複製到自己的項目中,並修改連接字符串和SQL語句等參數:

string connectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=Demo;Integrated Security=True;";
DbHelper dbHelper = new DbHelper(connectionString);

//執行查詢操作
string sql = "select * from Customers where CustomerID=@CustomerID";
SqlParameter[] parameters = { new SqlParameter("@CustomerID", "ALFKI") };
DataTable dataTable = dbHelper.ExecuteDataTable(sql, parameters);

//將查詢結果賦值給Model類
Customer customer = new Customer();
customer.CustomerID = dataTable.Rows[0]["CustomerID"].ToString();
customer.CompanyName = dataTable.Rows[0]["CompanyName"].ToString();
//其他屬性賦值...

//執行插入操作
sql = "insert into Customers(CustomerID, CompanyName) values(@CustomerID, @CompanyName)";
parameters = new SqlParameter[] {
    new SqlParameter("@CustomerID", customer.CustomerID),
    new SqlParameter("@CompanyName", customer.CompanyName)
};
int rows = dbHelper.ExecuteNonQuery(sql, parameters);

在上面的代碼中,我們首先實例化了一個DbHelper類,然後執行了一個查詢操作,將結果存儲到DataTable中。接着,我們將查詢結果賦值給了一個Model類的實例。最後,我們執行了一個插入操作,將Model類中的屬性值插入到數據庫中。

五、DbHelper下載

DbHelper是一個開源的項目,可以在GitHub上免費下載。使用DbHelper類時,需要將它的源代碼添加到自己的項目中。下載地址:https://github.com/laomms/DbHelper

六、DbHelperSql

DbHelperSql是一個專門用於連接SQL Server數據庫的DbHelper擴展類。它在DbHelper基礎上,增加了一些常用的SQL Server數據庫操作方法。使用DbHelperSql可以更加方便地進行數據庫操作。

以下是一個使用DbHelperSql類連接並操作SQL Server數據庫的示例:

string connectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=Demo;Integrated Security=True;";
DbHelperSql dbHelperSql = new DbHelperSql(connectionString);

//執行查詢操作
string sql = "select * from Customers where CustomerID=@CustomerID";
SqlParameter[] parameters = { new SqlParameter("@CustomerID", "ALFKI") };
DataTable dataTable = dbHelperSql.ExecuteDataTable(sql, parameters);

//將查詢結果賦值給Model類
Customer customer = new Customer();
customer.CustomerID = dataTable.Rows[0]["CustomerID"].ToString();
customer.CompanyName = dataTable.Rows[0]["CompanyName"].ToString();
//其他屬性賦值...

//執行插入操作
sql = "insert into Customers(CustomerID, CompanyName) values(@CustomerID, @CompanyName)";
parameters = new SqlParameter[] {
    new SqlParameter("@CustomerID", customer.CustomerID),
    new SqlParameter("@CompanyName", customer.CompanyName)
};
int rows = dbHelperSql.ExecuteNonQuery(sql, parameters);

七、DbHelper類基本代碼

以下是DbHelper類的基本代碼,可以用於連接和操作各種不同類型的數據庫:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;

namespace DbHelper
{
    public class DbHelper
    {
        protected DbProviderFactory factory;
        protected DbConnection connection;

        public DbHelper(string connectionString)
        {
            factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
            connection = factory.CreateConnection();
            connection.ConnectionString = connectionString;
        }

        public virtual DataTable ExecuteDataTable(string sql, params DbParameter[] parameters)
        {
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = sql;
                foreach (DbParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                using (DbDataAdapter adapter = factory.CreateDataAdapter())
                {
                    adapter.SelectCommand = command;
                    DataTable dataTable = new DataTable();
                    adapter.Fill(dataTable);
                    return dataTable;
                }
            }
        }

        public virtual object ExecuteScalar(string sql, params DbParameter[] parameters)
        {
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = sql;
                foreach (DbParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                return command.ExecuteScalar();
            }
        }

        public virtual int ExecuteNonQuery(string sql, params DbParameter[] parameters)
        {
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = sql;
                foreach (DbParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                return command.ExecuteNonQuery();
            }
        }

        public virtual DbDataReader ExecuteReader(string sql, params DbParameter[] parameters)
        {
            DbCommand command = connection.CreateCommand();
            command.CommandText = sql;
            foreach (DbParameter parameter in parameters)
            {
                command.Parameters.Add(parameter);
            }
            return command.ExecuteReader(CommandBehavior.CloseConnection);
        }

        public virtual void Open()
        {
            if (connection.State != ConnectionState.Open)
            {
                connection.Open();
            }
        }

        public virtual void Close()
        {
            if (connection.State != ConnectionState.Closed)
            {
                connection.Close();
            }
        }
    }
}

八、DbHelper.cs代碼

以下是DbHelper.cs文件的代碼,包括了DbHelper類的基本實現以及一些擴展方法。這個文件可以直接添加到項目中,用於連接和操作SQL Server數據庫。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;

namespace DbHelper
{
    public class DbHelper
    {
        protected DbProviderFactory factory;
        protected DbConnection connection;

        public DbHelper(string connectionString)
        {
            factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
            connection = factory.CreateConnection();
            connection.ConnectionString = connectionString;
        }

        public virtual DataTable ExecuteDataTable(string sql, params DbParameter[] parameters)
        {
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = sql;
                foreach (DbParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                using (DbDataAdapter adapter = factory.CreateDataAdapter())
                {
                    adapter.SelectCommand = command;
                    DataTable dataTable = new DataTable();
                    adapter.Fill(dataTable);
                    return dataTable;
                }
            }
        }

        public virtual object ExecuteScalar(string sql, params DbParameter[] parameters)
        {
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = sql;
                foreach (DbParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                return command.ExecuteScalar();
            }
        }

        public virtual int ExecuteNonQuery(string sql, params DbParameter[] parameters)
        {
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = sql;
                foreach (DbParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
                return command.ExecuteNonQuery();
            }
        }

        public virtual DbDataReader ExecuteReader(string sql, params DbParameter[] parameters)
        {
            DbCommand command = connection.CreateCommand();
            command.CommandText = sql;
            foreach (DbParameter parameter in parameters)
            {
                command.Parameters.Add(parameter);
            }
            return command.ExecuteReader(CommandBehavior.CloseConnection);
        }

        public virtual void Open()
        {
            if (connection.State != ConnectionState.Open)
            {
                connection.Open();
            }
        }

        public virtual void Close()
        {
            if (connection.State != ConnectionState.Closed)
            {
                connection.Close();
            }
        }
    }

    public static class DbHelperExtensions
    {
        public static int ExecuteNonQuery(this DbHelper dbHelper, string sql, Dictionary<string, object> parameters)
        {
            List<DbParameter> dbParameters = new List<DbParameter>();
            foreach (KeyValuePair<string, object> parameter in parameters)
            {
                dbParameters.Add(dbHelper.CreateParameter(parameter.Key, parameter.Value));
            }
            return dbHelper.ExecuteNonQuery(sql, dbParameters.ToArray());
        }

        public static object ExecuteScalar(this DbHelper dbHelper, string sql, Dictionary<string, object> parameters)
        {
            List<DbParameter> dbParameters = new List<DbParameter>();
            foreach (KeyValuePair<string, object> parameter in parameters)
            {
                dbParameters.Add(dbHelper.CreateParameter(parameter.Key, parameter.Value));
            }
            return dbHelper.ExecuteScalar(sql, dbParameters.ToArray());
        }

        public static DataTable ExecuteDataTable(this DbHelper dbHelper, string sql, Dictionary<string, object> parameters)
        {
            List<DbParameter> dbParameters = new List<DbParameter>();
            foreach (KeyValuePair<string, object> parameter in parameters)
            {
                dbParameters.Add(dbHelper.CreateParameter(parameter.Key, parameter.Value));
            }
            return dbHelper.ExecuteDataTable(sql, dbParameters.ToArray());
        }

        public static DbParameter CreateParameter(this DbHelper dbHelper, string name, object value)
        {
            return dbHelper.factory.CreateParameter(name, value);
        }

        public static DbParameter CreateParameter(this DbProviderFactory factory, string name, object value)
        {
            DbParameter parameter = factory.CreateParameter();
            parameter.ParameterName = name;
            parameter.Value = value;
            return parameter;
        }
    }
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/251016.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-13 13:31
下一篇 2024-12-13 13:32

相關推薦

  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、位元組與比特 在討論byte轉int之前,我們需要了解位元組和比特的概念。位元組是計算機存儲單位的一種,通常表示8個比特(bit),即1位元組=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25
  • 深入了解LaTeX的腳註(latexfootnote)

    一、基本介紹 LaTeX作為一種排版軟件,具有各種各樣的功能,其中腳註(footnote)是一個十分重要的功能之一。在LaTeX中,腳註是用命令latexfootnote來實現的。…

    編程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一個程序就是一個模塊,而一個模塊可以引入另一個模塊,這樣就形成了包。包就是有多個模塊組成的一個大模塊,也可以看做是一個文件夾。包可以有效地組織代碼和數據…

    編程 2025-04-25
  • 深入理解Python字符串r

    一、r字符串的基本概念 r字符串(raw字符串)是指在Python中,以字母r為前綴的字符串。r字符串中的反斜杠(\)不會被轉義,而是被當作普通字符處理,這使得r字符串可以非常方便…

    編程 2025-04-25
  • 深入剖析MapStruct未生成實現類問題

    一、MapStruct簡介 MapStruct是一個Java bean映射器,它通過註解和代碼生成來在Java bean之間轉換成本類代碼,實現類型安全,簡單而不失靈活。 作為一個…

    編程 2025-04-25
  • 深入探討馮諾依曼原理

    一、原理概述 馮諾依曼原理,又稱「存儲程序控制原理」,是指計算機的程序和數據都存儲在同一個存儲器中,並且通過一個統一的總線來傳輸數據。這個原理的提出,是計算機科學發展中的重大進展,…

    編程 2025-04-25

發表回復

登錄後才能評論