c# 自己参考网上一些资料写的mysql orm

本文介绍了一个简单的C# ORM框架实现,用于与MySQL数据库交互。包括数据库连接管理、查询、插入、更新、删除等基本操作,并提供了参数化查询和分页功能。

之前是做脚本语言开发的,现在需要用c#做一个桌面程序,c#其实有很多orm,只是自己不熟悉c#,想多学习下,就自己写了,当然由于初次写,有些地方不足。

class Dbhelper
    {
        private static MySqlConnection _prtconn = null;
        private static string constructorString = "server=127.0.0.1;User Id=root;password=123456;Database=puruite_client_development";

        #region open and close conn
        /// <summary>
        /// 链接mysql
        /// </summary>
        /// <returns></returns>
        private static MySqlConnection GetConn()
        {
           
            _prtconn = new MySqlConnection(constructorString);
            return _prtconn;
        }

        /// <summary>
        /// 打开链接
        /// </summary>
        private static void OpenConn()
        {
            if (_prtconn.State == ConnectionState.Closed)
            {
                _prtconn.Open();
            } else
            {
                _prtconn.Close();
                _prtconn.Open();
            }
        }

        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        /// <param name="prtconn">数据库链接</param>
        private static void CloseConn()
        {
            if (_prtconn.State == ConnectionState.Open)
            {
                _prtconn.Close();
                _prtconn.Dispose();
            }
        }
        #endregion

        #region select DataSet
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <returns></returns>
        public static DataSet GetDataSetSql(string sqlStr)
        {
            return GetDataSet(sqlStr, null, CommandType.Text);
        }

        /// <summary>
        /// 查询,返回DataSet对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <param name="paras">参数</param>
        /// <returns></returns>
        public static DataSet GetDataSetSqlParameter(string sqlStr, MySqlParameter[] paras)
        {
            return GetDataSet(sqlStr, paras, CommandType.Text);
        }

        /// <summary>
        /// 查询,返回DataSet对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <param name="paras">参数</param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static DataSet GetDataSet(string sqlStr, MySqlParameter[] paras, CommandType type)
        {
            DataSet ds = new DataSet();
            using (MySqlConnection conn = GetConn())
            {
                MySqlDataAdapter ada = new MySqlDataAdapter(sqlStr, conn);
                ada.SelectCommand.CommandType = type;
                if (paras != null)
                {
                    ada.SelectCommand.Parameters.AddRange(paras);
                }
                ada.Fill(ds);
            }
            return ds;
        }
        #endregion

        #region select count
        public static int GetCountByCondition(string tableName, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return 0;
            }
            if(conditions.Count == 0)
            {
                return 0;
            }
            string conditionStr = GetUpdateConditions(conditions);

            string sqlStr = string.Format("SELECT COUNT(id) FROM {0} WHERE {1}", tableName, conditionStr);
            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }
            return Convert.ToInt32(GetExecuteScalarSqlParameter(sqlStr, paras.ToArray()));
        }
        /// <summary>
        /// 返回所有数据总数
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static int GetCount(string tableName)
        {
            if (tableName == null)
            {
                return 0;
            }
            string sqlStr = string.Format("SELECT COUNT(id) FROM {0}", tableName);
            return Convert.ToInt32(GetExecuteScalarSql(sqlStr));
        }
        /// <summary>
        /// 查询 返回ExecuteScalar 对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <returns></returns>
        public static object GetExecuteScalarSql(String sqlStr)
        {
            return GetExecuteScalar(sqlStr, null, CommandType.Text);
        }

        /// <summary>
        /// 查询 返回ExecuteScalar 对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <param name="paras">参数</param>
        /// <returns></returns>
        public static object GetExecuteScalarSqlParameter(String sqlStr, MySqlParameter[] paras)
        {
            return GetExecuteScalar(sqlStr, paras, CommandType.Text);
        }
        /// <summary>
        ///  查询 返回ExecuteScalar 对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <param name="paras">参数</param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static object GetExecuteScalar(string sqlStr, MySqlParameter[] paras, CommandType type)
        {
            object res = null;
            using (MySqlConnection conn = GetConn())
            {
                // 创建操作对象
                MySqlCommand comd = conn.CreateCommand();
                // 定义操作类型
                comd.CommandType = type;
                // 定义操作语句
                comd.CommandText = sqlStr;
                // 定义执行语句参数
                if (paras != null)
                {
                    comd.Parameters.AddRange(paras);
                }
                // 打开数据库连接
                OpenConn();
                // 执行操作
                res = comd.ExecuteScalar();
                //关闭数据库连接,释放操作对象
                comd.Dispose();
                CloseConn();
            }
            return res;
        }
        #endregion

        #region select row by id
        /// <summary>
        ///  根据id 获取1行数据
        /// </summary>
        /// <param name="tableName">表</param>
        /// <param name="id">id</param>
        /// <param name="columns">要查询的字段,为了提高查询效率,禁止用*</param>
        /// <returns></returns>
        public static DataRow GetRowById(string tableName, long id, string[] columns)
        {
            if (tableName == null)
            {
                return null;
            }
            if (columns.Length == 0)
            {
                return null;
            }
            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE id={2}", string.Join(",", columns), tableName, id);
            DataTable dataTable = GetDataTableSql(sqlStr);
            if (dataTable.Rows.Count > 0)
            {
                return dataTable.Rows[0];
            }
            return null;
        }
        /// <summary>
        /// 根据id获取1行数据
        /// </summary>
        /// <typeparam name="T">表</typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static DataRow GetRowById<T>(T obj, string tableName, long id)
        {
            if (tableName == null)
            {
                return null;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return null;
            }
            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE id={2}", fields, tableName, id);
            DataTable dataTable = GetDataTableSql(sqlStr);
            if (dataTable.Rows.Count > 0)
            {
                return dataTable.Rows[0];
            }
            return null;
        }
        #endregion


        #region select row by condition
        /// <summary>
        /// 根据条件获取1行数据
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="columns"></param>
        /// <param name="conditions"></param>
        /// <returns></returns>
        public static DataRow GetRow(string tableName, string[] columns, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return null;
            }
            if (columns.Length == 0)
            {
                return null;
            }
            if (conditions.Count == 0)
            {
                return null;
            }
            string conditionStr = GetUpdateConditions(conditions);

            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE {2}", string.Join(",", columns), tableName, conditionStr);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            DataTable dataTable = GetDataTableSqlParameter(sqlStr, paras.ToArray());
            if (dataTable.Rows.Count > 0)
            {
                return dataTable.Rows[0];
            }
            return null;
        }
        /// <summary>
        /// 根据条件获取1行数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <param name="conditions"></param>
        /// <returns></returns>
        public static DataRow GetRow<T>(T obj, string tableName, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return null;
            }
            if (conditions.Count == 0)
            {
                return null;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return null;
            }
            string conditionStr = GetUpdateConditions(conditions);

            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE {2}", fields, tableName, conditionStr);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            DataTable dataTable = GetDataTableSqlParameter(sqlStr, paras.ToArray());
            if (dataTable.Rows.Count > 0)
            {
                return dataTable.Rows[0];
            }
            return null;
        }
        #endregion

        #region select  rows by condition
        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <param name="tableName">表</param>
        /// <param name="columns">要查询的字段,为了提高查询效率,禁止用*</param>
        /// <returns></returns>
        public static DataTable GetRows(string tableName, string[] columns, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return null;
            }
            if (columns.Length == 0)
            {
                return null;
            }
            if (conditions.Count == 0)
            {
                return null;
            }
            string conditionStr = GetUpdateConditions(conditions);

            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE {2}", string.Join(",", columns), tableName, conditionStr);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return GetDataTableSqlParameter(sqlStr, paras.ToArray());
        }
        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <param name="tableName">表</param>
        /// <param name="columns">要查询的字段,为了提高查询效率,禁止用*</param>
        /// <returns></returns>
        public static DataTable GetRowsPagination(string tableName, string[] columns, Dictionary<string, object> conditions, int currentPage, int perPage)
        {
            if (tableName == null)
            {
                return null;
            }
            if (columns.Length == 0)
            {
                return null;
            }
            if (conditions.Count == 0)
            {
                return null;
            }
            string conditionStr = GetUpdateConditions(conditions);
            int offsetPage = (currentPage - 1) * perPage;

            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE {2} LIMIT {3}, {4}", string.Join(",", columns), tableName, conditionStr, offsetPage, perPage);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return GetDataTableSqlParameter(sqlStr, paras.ToArray());
        }
        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataTable GetRows<T>(T obj, string tableName, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return null;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return null;
            }
            if (conditions.Count == 0)
            {
                return null;
            }
            string conditionStr = GetUpdateConditions(conditions);

            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE {2}", fields, tableName, conditionStr);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return GetDataTableSqlParameter(sqlStr, paras.ToArray());
        }

        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataTable GetRowsPagination<T>(T obj, string tableName, Dictionary<string, object> conditions, int currentPage, int perPage)
        {
            if (tableName == null)
            {
                return null;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return null;
            }
            if (conditions.Count == 0)
            {
                return null;
            }
            string conditionStr = GetUpdateConditions(conditions);
            int offsetPage = (currentPage - 1) * perPage;

            string sqlStr = string.Format("SELECT {0} FROM {1} WHERE {2} LIMIT {3}, {4}", fields, tableName, conditionStr, offsetPage, perPage);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return GetDataTableSqlParameter(sqlStr, paras.ToArray());
        }
        #endregion


        #region select all row
        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <param name="tableName">表</param>
        /// <param name="columns">要查询的字段,为了提高查询效率,禁止用*</param>
        /// <returns></returns>
        public static DataTable GetAll(string tableName, string[] columns)
        {
            if (tableName == null)
            {
                return null;
            }
            if(columns.Length == 0)
            {
                return null;
            }
            string sqlStr = string.Format("SELECT {0} FROM {1}", string.Join(",", columns), tableName);
            return GetDataTableSql(sqlStr);
        }
        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <param name="tableName">表</param>
        /// <param name="columns">要查询的字段,为了提高查询效率,禁止用*</param>
        /// <returns></returns>
        public static DataTable GetAllPagination(string tableName, string[] columns, int currentPage, int perPage)
        {
            if (tableName == null)
            {
                return null;
            }
            if (columns.Length == 0)
            {
                return null;
            }
            int offsetPage = (currentPage - 1) * perPage;
            string sqlStr = string.Format("SELECT {0} FROM {1} LIMIT {2}, {3}", string.Join(",", columns), tableName, offsetPage, perPage);
            return GetDataTableSql(sqlStr);
        }
        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataTable GetAll<T>(T obj, string tableName)
        {
            if (tableName == null)
            {
                return null;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return null;
            }
            string sqlStr = string.Format("SELECT {0} FROM {1}", fields, tableName);
            return GetDataTableSql(sqlStr);
        }

        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataTable GetAllPagination<T>(T obj, string tableName, int currentPage, int perPage)
        {
            if (tableName == null)
            {
                return null;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return null;
            }
            int offsetPage = (currentPage - 1) * perPage;
            string sqlStr = string.Format("SELECT {0} FROM {1} LIMIT {2}, {3}", fields, tableName, offsetPage, perPage);
            return GetDataTableSql(sqlStr);
        }
        #endregion


        #region select DataTable
        /// <summary>
        /// 查询 返回DataTable 对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <returns></returns>
        public static DataTable GetDataTableSql(String sqlStr)
        {
            return GetDataTable(sqlStr, null, CommandType.Text);
        }

        /// <summary>
        /// 查询 返回DataTable 对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <param name="paras">参数</param>
        /// <returns></returns>
        public static DataTable GetDataTableSqlParameter(String sqlStr, MySqlParameter[] paras)
        {
            return GetDataTable(sqlStr, paras, CommandType.Text);
        }
        /// <summary>
        ///  查询 返回DataTable 对象
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <param name="paras">参数</param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static DataTable GetDataTable(string sqlStr, MySqlParameter[] paras, CommandType type)
        {
            DataTable dt = new DataTable();
            using (MySqlConnection conn = GetConn())
            {
                MySqlDataAdapter ada = new MySqlDataAdapter(sqlStr, conn);
                ada.SelectCommand.CommandType = type;
                if (paras != null)
                {
                    ada.SelectCommand.Parameters.AddRange(paras);
                }
                ada.Fill(dt);
            }
            return dt;
        }
        #endregion



        #region insert
        /// <summary>
        /// 添加单条数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static int QueryInsert<T>(T obj, string tableName)
        {
            if (tableName == null)
            {
                return 0;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return 0;
            }
            string values = GetValues(obj);
            if (values == null)
            {
                return 0;
            }
            // insert 语句
            string sqlStr = string.Format("INSERT INTO {0} ( {1} ) VALUES( {2} )", tableName, fields, values);
            // 字段列表
            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (var item in obj.GetType().GetProperties())
            {
                if (item.GetValue(obj) != null)
                {
                    paras.Add(SetParam("@" + item.Name, item.GetValue(obj)));
                }
            }
           
           return QuerySqlParameter(sqlStr, paras.ToArray());
        }

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static long QueryInsertReturnId<T>(T obj, string tableName)
        {
            if (tableName == null)
            {
                return 0;
            }
            string fields = GetFields(obj);
            if (fields == null)
            {
                return 0;
            }
            string values = GetValues(obj);
            if (values == null)
            {
                return 0;
            }
            // insert 语句
            string sqlStr = string.Format("INSERT INTO {0} ( {1} ) VALUES( {2} )", tableName, fields, values);
            // 字段列表
            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (var item in obj.GetType().GetProperties())
            {
                if (item.GetValue(obj) != null)
                {
                    paras.Add(SetParam("@" + item.Name, item.GetValue(obj)));
                }
            }

            long id = 0;
            using (MySqlConnection conn = GetConn())
            {
                // 创建操作对象
                MySqlCommand comd = conn.CreateCommand();
                // 定义操作类型
                comd.CommandType = CommandType.Text;
                // 定义操作语句
                comd.CommandText = sqlStr;
                // 定义执行语句参数
                if (paras != null)
                {
                    comd.Parameters.AddRange(paras.ToArray());
                }
                // 打开数据库连接
                OpenConn();
                // 执行操作
                comd.ExecuteNonQuery();
                id = comd.LastInsertedId;
                //关闭数据库连接,释放操作对象
                comd.Dispose();
                CloseConn();
            }
            return id;
        }
        #endregion


        #region update
        /// <summary>
        /// 根据id更新指定行数据
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="updateColumns"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static int QueryUpdateById(string tableName, Dictionary<string, object> updateColumns, long id)
        {
            if (tableName == null)
            {
                return 0;
            }
            if (updateColumns.Count == 0)
            {
                return 0;
            }
            if (id == 0)
            {
                return 0;
            }
            string values = GetUpdateValues(updateColumns);
            string sqlStr = string.Format("UPDATE {0} SET {1} WHERE id={2}", tableName, values, id);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in updateColumns)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return QuerySqlParameter(sqlStr, paras.ToArray());
        }
        /// <summary>
        /// 根据id更新
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static int QueryUpdateById<T>(T obj, string tableName, long id)
        {
            if (tableName == null)
            {
                return 0;
            }
            if (id == 0)
            {
                return 0;
            }
            string values = GetUpdateValues(obj);
            string sqlStr = string.Format("UPDATE {0} SET {1} WHERE id={2}", tableName, values, id);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (var item in obj.GetType().GetProperties())
            {
                if (item.GetValue(obj) != null)
                {
                    paras.Add(SetParam("@" + item.Name, item.GetValue(obj)));
                }
            }

            return QuerySqlParameter(sqlStr, paras.ToArray());
        }

       /// <summary>
       /// 根据条件更新
       /// </summary>
       /// <param name="tableName"></param>
       /// <param name="updateColumns"></param>
       /// <param name="conditions"></param>
       /// <returns></returns>
        public static int QueryUpdate(string tableName, Dictionary<string, object> updateColumns, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return 0;
            }
            if (updateColumns.Count == 0)
            {
                return 0;
            }
            if (conditions.Count == 0)
            {
                return 0;
            }
            string values = GetUpdateValues(updateColumns);
            string conditionStr = GetUpdateConditions(conditions);

            string sqlStr = string.Format("UPDATE {0} SET {1} WHERE {2}", tableName, values, conditionStr);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in updateColumns)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return QuerySqlParameter(sqlStr, paras.ToArray());
        }

        /// <summary>
        /// 根据条件更新
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="tableName"></param>
        /// <param name="conditions"></param>
        /// <returns></returns>
        public static int QueryUpdate<T>(T obj, string tableName, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return 0;
            }
            if  (conditions.Count == 0)
            {
                return 0;
            }
            string conditionStr = GetUpdateConditions(conditions);
            string values = GetUpdateValues(obj);
            string sqlStr = string.Format("UPDATE {0} SET {1} WHERE {2}", tableName, values, conditionStr);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (var item in obj.GetType().GetProperties())
            {
                if (item.GetValue(obj) != null)
                {
                    paras.Add(SetParam("@" + item.Name, item.GetValue(obj)));
                }
            }

            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return  QuerySqlParameter(sqlStr, paras.ToArray());
        }
        #endregion


        #region delete
        /// <summary>
        /// 根据id 删除
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static int QueryDeleteById(string tableName, long id)
        {
            if (tableName == null)
            {
                return 0;
            }
            if (id == 0)
            {
                return 0;
            }
            string sqlStr = string.Format("DELETE FROM {0} where id={1}", tableName, id);
            return QuerySql(sqlStr);
        }

        /// <summary>
        /// 根据条件删除
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="conditions"></param>
        /// <returns></returns>
        public static int QueryDelete(string tableName, Dictionary<string, object> conditions)
        {
            if (tableName == null)
            {
                return 0;
            }
            if (conditions.Count == 0)
            {
                return 0;
            }
            string conditionStr = GetUpdateConditions(conditions);
            string sqlStr = string.Format("DELETE FROM {0} where {1}", tableName, conditionStr);

            List<MySqlParameter> paras = new List<MySqlParameter>();
            foreach (KeyValuePair<string, object> item in conditions)
            {
                paras.Add(SetParam("@" + item.Key, item.Value));
            }

            return QuerySqlParameter(sqlStr, paras.ToArray());
        }
        #endregion


        #region insert update delete
        /// <summary>
        /// 纯sql语句
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <returns></returns>
        public static int QuerySql(string sqlStr)
        {
            return query(sqlStr, null, CommandType.Text);
        }

        /// <summary>
        /// 参数sql语句
        /// </summary>
        /// <param name="sqlStr">sql</param>
        /// <param name="paras">参数</param>
        /// <returns></returns>
        public static int QuerySqlParameter(string sqlStr, MySqlParameter[] paras)
        {
            return query(sqlStr, paras, CommandType.Text);
        }

        /// <summary>
        ///  执行sql
        /// </summary>
        /// <param name="sql_str">sql语句</param>
        /// <returns>受影响的行数</returns>
        private static int query(string sqlStr, MySqlParameter[] paras, CommandType type)
        {
            int res = 0;
            // 创建数据库连接对象
            using (MySqlConnection conn = GetConn())
            {
                // 创建操作对象
                MySqlCommand comd = conn.CreateCommand();
                // 定义操作类型
                comd.CommandType = type;
                // 定义操作语句
                comd.CommandText = sqlStr;
                // 定义执行语句参数
                if (paras != null)
                {
                    comd.Parameters.AddRange(paras);
                }
                // 打开数据库连接
                OpenConn();
                // 执行操作
                res = comd.ExecuteNonQuery();
                //关闭数据库连接,释放操作对象
                comd.Dispose();
                CloseConn();
            }
            return res;
        }
        #endregion

        #region others
        /// <summary>
        /// 实例化MySqlParameter
        /// </summary>
        /// <param name="param"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static MySqlParameter SetParam(string param, object value)
        {
            return new MySqlParameter(param, value);
        }

        /// <summary>
        /// 拼接insert的数据字段
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        private static string GetFields<T>(T obj)
        {
            if (obj == null)
            {
                return string.Empty;
            }
            return string.Join(",", obj.GetType().GetProperties().Select(p => p.Name).ToList());
        }

        /// <summary>
        /// 拼接insert的数据值字段
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        private static string GetValues<T>(T obj)
        {
            if (obj == null)
            {
                return string.Empty;
            }
            return string.Join(",", obj.GetType().GetProperties().Select(p => "@" + p.Name).ToList());
        }

        /// <summary>
        /// 拼接update的数据字段
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        private static string GetUpdateValues<T>(T obj)
        {
            if (obj == null)
            {
                return string.Empty;
            }
            // 不更新created_at, 需要没张表都有这个字段和updated_at字段
            return string.Join(",", obj.GetType().GetProperties().Where(p => (p.Name != "id" && p.Name != "created_at")).Select(p => p.Name + "=@" + p.Name).ToList());
        }

        private static string GetUpdateValues(Dictionary<string, object> updateColumns)
        {
            if (updateColumns == null)
            {
                return string.Empty;
            }

            List<string> items = new List<string>();
            foreach (string itemKey in updateColumns.Keys)
            {
                items.Add(itemKey + "=@" + itemKey);
            }
            return string.Join(",  ", items);
        }

        /// <summary>
        /// 拼接where语句
        /// </summary>
        /// <param name="conditions"></param>
        /// <returns></returns>
        private static string GetUpdateConditions(Dictionary<string, object> conditions)
        {
            if(conditions == null)
            {
                return string.Empty;
            }
            List<string> items = new List<string>();
            foreach (string itemKey in conditions.Keys)
            {
                items.Add(itemKey + "=@" + itemKey);
            }
            if (items.Count == 1)
            {
                return string.Join(" ", items);
            }
            return string.Join(" AND ", items);
        }
        #endregion
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值