C#数据库操作通用类

基类:

using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data.SQLite;
using MySql.Data.MySqlClient;

namespace DBHelper
{
    public class DataBaseHelper
    {
        private string _connStr;
        private DatabaseType _dbType;
        protected DbConnection dbSession;

        public DataBaseHelper(DbConnection session)
        {
            this.dbSession = session;
        }

        public DataBaseHelper(DbConnection session, string connStr, DatabaseType dbType)
            : this(session)
        {
            this._connStr = connStr;
            this._dbType = dbType;
        }

        private DbDataAdapter CreateDbDataAdapter(string M_str_sqlstr)
        {
            DbDataAdapter adp;
            switch (_dbType)
            {
                case DatabaseType.SqlServer:
                    adp = new SqlDataAdapter(M_str_sqlstr, dbSession as SqlConnection);
                    return adp;
                case DatabaseType.MySql:
                    adp = new MySqlDataAdapter(M_str_sqlstr, dbSession as MySqlConnection);
                    return adp;
                case DatabaseType.SQLite:
                    adp = new SQLiteDataAdapter(M_str_sqlstr, dbSession as SQLiteConnection);
                    return adp;
                case DatabaseType.OleDb:
                    adp = new OleDbDataAdapter(M_str_sqlstr, dbSession as OleDbConnection);
                    return adp;
                default:
                    throw new NotImplementedException();
            }
        }

        private DbCommand GetCommand(DbConnection conn, string M_str_sqlstr)
        {
            DbCommand command = conn.CreateCommand();
            command.CommandText = M_str_sqlstr;
            return command;
        }

        protected void OpenDataBase()
        {
            try
            {
                if (this.dbSession.State != ConnectionState.Open)
                    this.dbSession.Open();  //打开连接
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        protected void CloseDataBase()
        {
            if (this.dbSession != null)
            {
                if (this.dbSession.State == ConnectionState.Open)
                {
                    this.dbSession.Close(); //关闭连接
                }
            }
        }

        /// <summary>
        /// 增删改非查询类方法
        /// </summary>
        /// <param name="M_str_sqlstr">要执行的SQL语句</param>
        /// <param name="param">参数列表,没有参数填入null</param>
        /// <returns>返回影响行数</returns>
        public int ExecuteNonQuery(string M_str_sqlstr, params DbParameter[] param)
        {
            try
            {
                OpenDataBase();
                DbCommand cmd = GetCommand(dbSession, M_str_sqlstr);  //创建命令

                if (param != null && param.Length > 0)
                    cmd.Parameters.AddRange(param);

                return cmd.ExecuteNonQuery();               //执行命令,ExecuteNonQuery
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                CloseDataBase();
            }
        }

        /// <summary>
        /// 执行SQL语句,查询首行首列
        /// </summary>
        /// <param name="M_str_sqlstr">要执行的SQL语句</param>
        /// <param name="param">参数列表,没有参数填入null</param>
        /// <returns>返回的首行首列</returns>
        public object ExecuteScalar(string M_str_sqlstr, params DbParameter[] param)
        {
            try
            {
                this.OpenDataBase();
                DbCommand cmd = GetCommand(dbSession, M_str_sqlstr);  //创建命令

                if (param != null && param.Length > 0)
                    cmd.Parameters.AddRange(param);

                return cmd.ExecuteScalar();     //返回第一行第一列
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.CloseDataBase();
            }
        }

        /// <summary>
        /// 查询SQL语句获取DataReader
        /// </summary>
        /// <param name="M_str_sqlstr">要执行的SQL语句</param>
        /// <param name="param">参数列表,没有参数填入null</param>
        /// <returns>查询到的DataReader(关闭该对象的时候,自动关闭连接)</returns>
        public DbDataReader ExecuteReader(string M_str_sqlstr, params DbParameter[] param)
        {
            try
            {
                this.OpenDataBase();
                DbCommand cmd = GetCommand(dbSession, M_str_sqlstr);  //创建命令

                if (param != null && param.Length > 0)
                    cmd.Parameters.AddRange(param);

                return cmd.ExecuteReader(CommandBehavior.CloseConnection);  //创建一个SqlDataReader用于读取数据
            }
            catch (Exception ex)
            {
                this.CloseDataBase();
                throw ex;
            }
        }

        /// <summary>
        /// 执行查询,返回DataTable对象
        /// </summary>
        /// <param name="M_str_sqlstr">要执行的SQL语句</param>
        /// <param name="param">参数列表,没有参数填入null</param>
        /// <returns>DataTable对象</returns>
        public DataTable ExecuteTable(string M_str_sqlstr, params DbParameter[] param)
        {
            DataTable dt = new DataTable();

            try
            {
                this.OpenDataBase();
                DbDataAdapter adp = CreateDbDataAdapter(M_str_sqlstr);

                if (param != null && param.Length > 0)
                    adp.SelectCommand.Parameters.AddRange(param);

                adp.Fill(dt);
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.CloseDataBase();
            }
        }

        /// <summary>
        /// 执行查询,返回DataTable对象
        /// </summary>
        /// <param name="M_str_sqlstr">要执行的SQL语句</param>
        /// <param name="param">参数列表,没有参数填入null</param>
        /// <returns>DataTable对象</returns>
        public DataSet ExecuteDataSet(string M_str_sqlstr, params DbParameter[] param)
        {
            DataSet ds = new DataSet();

            try
            {
                this.OpenDataBase();
                DbDataAdapter adp = CreateDbDataAdapter(M_str_sqlstr);

                if (param != null && param.Length > 0)
                    adp.SelectCommand.Parameters.AddRange(param);

                adp.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.CloseDataBase();
            }
        }
    }
}

继承:

    public class MySqlOperator : DataBaseHelper
    {
        /// <summary>
        /// 创建连接
        /// </summary>
        /// <param name="connStr"></param>
        public MySqlOperator(string connStr) : base(new MySqlConnection(connStr), connStr, DatabaseType.MySql) { }
    }

    public class SqlOperator : DataBaseHelper
    {
        /// <summary>
        /// 创建连接
        /// </summary>
        /// <param name="connStr"></param>
        public SqlOperator(string connStr) : base(new SqlConnection(connStr), connStr, DatabaseType.SqlServer) { }
    }

    public class OleDbOperator : DataBaseHelper
    {
        /// <summary>
        /// 创建连接
        /// </summary>
        /// <param name="connStr"></param>
        public OleDbOperator(string connStr): base(new OleDbConnection(connStr), connStr, DatabaseType.OleDb){ }
    }

    public class SQLiteOperator : DataBaseHelper
    {
        /// <summary>
        /// 创建连接
        /// </summary>
        /// <param name="connStr"></param>
        public SQLiteOperator(string connStr) : base(new SQLiteConnection(connStr), connStr, DatabaseType.SQLite) { }
    }

Demo如下:
1、数据访问层(DAL):主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作

        /// <summary>
        /// 根据用户名和密码比对用户信息
        /// </summary>
        /// <param name="objUser">包含用户名和密码的用户对象</param>
        /// <returns>返回用户对象信息(若无用户信息则对象为null)</returns>
        public UserInfo UserLogin(UserInfo objUser)
        {
            String sql = "SELECT Name,Password FROM user where Name=@username and Password=@password";

            DbParameter[] param = new SQLiteParameter[] {
                new SQLiteParameter("@username",objUser.UserName),
                new SQLiteParameter("@password", objUser.Password)
            };

            DbDataReader objReader = sqliteHelper.ExecuteReader(sql, param);

            if (objReader.Read())
            {
                //objUser.Id = Convert.ToInt32(objReader["Id"]);
                //objUser.status = Convert.ToInt32(objReader["status"]);
            }
            else
                objUser = null;
            objReader.Close();
            return objUser;
        }

2、业务逻辑层(BLL):对传送数据进行逻辑判断分折,并进行传送正确的值。

        public bool UserLogin(UserInfo objUser, out string messageStr)
        {
            messageStr = "";//返回界面层添加用户返回信息
            bool isSuccess = false;

            //数据验证
            if (objUser.UserName.Trim().Length != 0 && objUser.Password.Trim().Length != 0)
            {
                if (objUserDB.UserLogin(objUser) != null)//判断从传递来的username是否为空
                    isSuccess = true;
                else
                    messageStr = "<用户名>或<密码>错误!";
            }
            else
                messageStr = "<用户名>和<密码>不可为空!";

            return isSuccess;
        }

3、表现层(UI)即用户界面层

        private void btn_Confirm_Click(object sender, EventArgs e)
        {
            try
            {
                // 封装对象
                UserInfo objUser = new UserInfo
                {
                    UserName = cbo_Tester.Text.Trim(),
                    Password = txb_Password.Text.Trim()
                };

                string messageStr = "";

                if (objUserManager.UserLogin(objUser, out messageStr))
                {
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                    return;
                }
                else
                {
                    lbl_Message.Text = messageStr;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("登录异常:" + ex.Message, "登录提示");
            }
        }

写的不好,欢迎指正
https://download.csdn.net/download/HelloAnzi/12038442

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值