SqlHelper工具类

/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描    述:Access或DB2 的操作工具类                                                    
*│ 作    者:执笔小白                                              
*│ 版    本:2.0                                       
*│ 创建时间:2023-6-22 20:21:56                            
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: Util.SQLHelpers                               
*│ 类    名:AccessAndDB2SqlHelper                                     
*└──────────────────────────────────────────────────────────────┘
*/
using System;
using System.Configuration;
using System.Data.OleDb;
using System.Data;

namespace Util.SQLHelpers
{
    /// <summary>
    /// Access或DB2 Sql的操作工具类(需要安装DB2客户端)
    /// </summary>
    public class AccessAndDB2SqlHelper
    {
        #region 变量
        /// <summary>
        /// 连接字符串
        /// Access:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;Jet OLEDB:Database Password=Aa123456;
        /// DB2:Server=localhost;DataBase=TeseDB;UID=user;PWD=Aa123456;
        /// </summary>
        private static string str = ConfigurationManager.ConnectionStrings["AccessOrDB2ConStr"].ConnectionString;
        #endregion 变量

        #region 初始化
        /// <summary>
        /// 初始化数据库链接
        /// </summary>
        /// <param name="conStr">数据库连接字符串</param>
        public static void Initial(string conStr)
        {
            str = conStr;  // 
        }
        #endregion 初始化

        /* 返回的是受影响的行数
         * ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入,删除,修改等操作时,首选ExecuteNonQuery(),不适用于Selete语句,返回永远是-1
         * ExecuteNonQuery()执行成功返回的是一受影响的行数,对于"Create Table"和"Drop Table"语句,返回值是0,
         * ExecuteNonQuery()操作数据时,可以不使用DataSet直接更改数据库中的数据。
         */
        public static int ExecuteNonQuery(string sql, params OleDbParameter[] ps)
        {
            using (OleDbConnection con = new OleDbConnection(str))
            {
                using (OleDbCommand cmd = new OleDbCommand(sql, con))
                {
                    if (ps != null)
                    {
                        cmd.Parameters.AddRange(ps);
                    }
                    con.Open();

                    int cc = cmd.ExecuteNonQuery();
                    con.Close();
                    return cc;
                }
            }
        }

        /* ExecuteScalar()方法也可以用来执行SQL语句,但是executescalar()执行SQL语句后返回值与ExecuteNonQuery()并不相同,
         * ExecuteNonQuery()操作后返回的是一个值,而executescalar()操作后则会返回一个对象(object),
         * 如果执行的SQL语句是查询语句,则返回结果是查询后的第一行第一列,
         * 如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型装换来显示。
         * 
         * executescalar()经常使用当需要返回单一值时的情况。例如当插入一条数据信息时,
         * 需要马上知道刚才插入的值,则可以使用executescalar()方法。
         */
        public static object ExecuteScalar(string sql, params OleDbParameter[] ps)
        {
            using (OleDbConnection con = new OleDbConnection(str))
            {
                using (OleDbCommand cmd = new OleDbCommand(sql, con))
                {
                    if (ps != null)
                    {
                        cmd.Parameters.AddRange(ps);
                    }
                    con.Open();//打开数据库

                    object cc = cmd.ExecuteScalar();
                    con.Close();
                    return cc;
                }
            }
        }

        /* 快速查询
         * ExecuteReader比DataSet而言,DataReader具有较快的访问能力,并且能够使用较少的服务器资源。
         * DataReader对象提供了游标形式的读取方式,当从结果行中读取了一行,则游标会继续读取到下一行。
         * 通过read方法可以判断数据是否还有下一行,如果存在数据,则继续运行返回true,如果没有数据,则返回false。
         */
        public static DataTable ExecuteReader(string sql, params OleDbParameter[] ps)
        {
            using (OleDbConnection con = new OleDbConnection(str))
            {
                using (OleDbCommand cmd = new OleDbCommand(sql, con))
                {
                    if (ps != null)
                    {
                        cmd.Parameters.AddRange(ps);
                    }
                    con.Open();
                    OleDbDataReader reader = cmd.ExecuteReader();
                    DataTable datatable = new DataTable();

                    // 添加DataTable列
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        DataColumn myDataColumn = new DataColumn();
                        myDataColumn.DataType = reader.GetFieldType(i);
                        myDataColumn.ColumnName = reader.GetName(i);
                        datatable.Columns.Add(myDataColumn);
                    }

                    // 添加DataTable数据
                    while (reader.Read())
                    {
                        //var n1 = reader.GetInt32(0);   // 第一列值
                        //var n2 = reader.GetString(1);  // 第二列值

                        DataRow myDataRow = datatable.NewRow();
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            myDataRow[i] = reader[i].ToString();
                        }
                        datatable.Rows.Add(myDataRow);
                    }

                    reader.Close();
                    //con.Open();
                    cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);  // 关闭关联的connection

                    return datatable;
                }
            }
        }

        /* 通用查询方法
         * 为了将数据库的数据填充到dataset中,则必须先使用adapter对象的方法实现填充,当数据填充完成后,
         * 开发人员可以将记录添加到dataset对象中,然后使用update方法将数据插入到数据库中。
         */
        public static DataSet SqlDataAdapter_Fill(string sql, params OleDbParameter[] ps)
        {
            using (OleDbConnection con = new OleDbConnection(str))
            {
                using (OleDbDataAdapter da = new OleDbDataAdapter(sql, con))
                {
                    if (ps != null)
                    {
                        da.SelectCommand.Parameters.AddRange(ps);
                    }
                    con.Open();

                    DataSet dataSet = new DataSet();
                    da.Fill(dataSet);
                    con.Close();
                    return dataSet;
                }
            }
        }

        /* 使用DataSet数据集更新数据        
         * 为了将数据库的数据填充到dataset中,则必须先使用adapter对象的方法实现填充      
         */
        public static int SqlDataAdapter_Update(string sql, DataSet ds, string tableName)
        {
            using (OleDbConnection con = new OleDbConnection(str))
            {
                using (OleDbDataAdapter sa = new OleDbDataAdapter(sql, con))
                {
                    OleDbCommandBuilder builder = new OleDbCommandBuilder(sa);

                    return sa.Update(ds, tableName);
                }
            }
        }

        #region 事务
        /// <summary>
        /// 返回的是受影响的行数-事务
        /// </summary>
        /// <param name="sql">多个sql</param>
        /// <param name="ps">指定类型的参数</param>
        /// <returns></returns>
        public static int ExecuteNonQueryTrans(string sql, params OleDbParameter[] ps)
        {
            using (OleDbConnection con = new OleDbConnection(str))
            {
                con.Open();
                using (OleDbTransaction trans = con.BeginTransaction())
                {
                    try
                    {
                        using (OleDbCommand cmd = new OleDbCommand())
                        {
                            cmd.Connection = con;
                            cmd.Transaction = trans;
                            cmd.CommandText = sql;
                            if (ps != null)
                            {
                                cmd.Parameters.AddRange(ps);
                            }
                            int cc = cmd.ExecuteNonQuery();

                            trans.Commit();
                            con.Close();
                            return cc;
                        }
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        con.Close();
                        con.Dispose();
                        throw ex;
                    }
                }
            }
        }
        #endregion
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228.
  • 229.
  • 230.
  • 231.

作者:꧁执笔小白꧂