首页 > 数据库技术 > 详细

C#学习笔记之数据库帮助类

时间:2019-09-18 12:12:42      阅读:126      评论:0      收藏:0      [点我收藏+]

        不管什么项目基本都不能避免对频繁的对数据库进行操作。如果直接在代码中操作,不仅会导致代码里面夹杂着太多的SQL语句,影响代码的可读性,还会因为创建太多变量影响程序运行性能。基于MVC编程思想,对数据库的操作应该与控制逻辑的代码分离。

         这时我们可以把相对应的,需要大量重复使用的代码封装到一个帮助类里--数据库帮助类。在这个类里,我们只需要实例化一次SqlConnection,就可以在程序关闭前重复使用该类里面的所有方法。

  

技术分享图片
  /// <summary>
   /// 数据库帮助类
   /// </summary>
   public class SqlHelpClass
    {
        //这个字符串是连接字符串,包含着数据库的信息
        static string strSql = "server=SC-201802111806; uid=sa; pwd=123456; database=posDB";
        static SqlConnection sqlConnection;
        static SqlCommand cmd;

        static SqlHelpClass()
        {
            sqlConnection = new SqlConnection(strSql);//创建一个数据库连接实例(实例就是对象)
            //对这个类SqlConnection作用不明白的可以把鼠标放到类名可以显示微软对类给出的说明
            sqlConnection.Open();//打开连接
            cmd = new SqlCommand();//创建一个查询实例
            //SqlConnection就像路,我们创建SqlConnection实例时就打通了连通数据库的一条路,SqlCommand就是信使,
            //我们每次要对数据库发出指令时,SqlCommand对象就可以帮我们把这个指令送到数据库,然后再把我们需要的数据传回来。
            cmd.Connection = sqlConnection;//设置数据库连接,就是给信使指一条路
            

        }
        /// <summary>
        /// 对连接执行SQL语句并返回受影响行数
        /// </summary>
        /// <param name="sql">数据库操作命令语句</param>
        /// <returns>受影响的行数</returns>
        public static int ExecuteNonQuery(string sql)
        {


            cmd.CommandText = sql.ToString();//设置要执行的数据库命令,就是你得把信给信使

            return cmd.ExecuteNonQuery();//返回受影响的行数,cmd.ExecuteNonQuery()在这里相当于执行命令:你给我把信送过去。
                                         //如果没有cmd.ExecuteNonQuery(),那么命令是不会执行的。
        }

        /// <summary>
        /// 返回查询结果集的第一行第一列的值
        /// </summary>
        /// <returns>查询结果第一行第一列的值</returns>
        public static object ExecuteScalar(string sql)
        {
            cmd.CommandText = sql;
           return cmd.ExecuteScalar();
        }

        /// <summary>
        /// 向数据库发送新增命令
        /// </summary>
        /// <param name="tableName">数据表名称</param>
        /// <param name="list">数据集合</param>
        /// <returns>受影响行数</returns>
        public static int  AddData(  string tableName,params object[] list)
        {
            StringBuilder addSql = new StringBuilder();
            addSql.Append("insert into ");
            addSql.Append (tableName);
            addSql.Append(" values(");
            for (int i = 0; i < list.Length; i++)          
            {
                if (i == list.Length - 1)
                {
                    if (list[i].GetType() == Type.GetType("int") || list[i].GetType() == Type.GetType("float") || list[i].GetType() == Type.GetType("double"))
                        addSql .Append(list[i].ToString() + ")");
                    else
                        addSql.Append("\‘" + list[i] + "\‘)");

                    break;
                }
                if (list[i].GetType() == Type.GetType("int") || list[i].GetType() == Type.GetType("float") || list[i].GetType() == Type.GetType("double"))
                    addSql.Append(list[i].ToString() + ",");
                else
                    addSql.Append("\‘" + list[i]+"\‘,");
            }
            cmd.CommandText = addSql.ToString();//设置要执行的数据库命令,就是你得把信给信使

            return cmd.ExecuteNonQuery();//返回受影响的行数,cmd.ExecuteNonQuery()在这里相当于执行命令:你给我把信送过去。
                                         //如果没有cmd.ExecuteNonQuery(),那么命令是不会执行的。


        }
        /// <summary>
        /// 向数据库发送删除命令
        /// </summary>
        /// <param name="tableName">数据表名称</param>
        /// <param name="where">条件</param>
        /// <returns>受影响行数</returns>
        public static int  DeleteDate(string tableName,string  where)
        {
            string deleteSql = "delete from "+tableName+ " where =" + where;
            cmd.CommandText = deleteSql;
            return cmd.ExecuteNonQuery();
        }

        /// <summary>
        /// 向数据库发送修改命令
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="strUpdata">修改信息(列名=表达式)</param>
        /// <param name="where">条件</param>
        /// <returns>受影响行数</returns>
        public static int UpdateData(string tableName,string strUpdata,string where)
        {
            string updateSql = "update "+tableName+ " set " + strUpdata + " where " + where;
            cmd.CommandText = updateSql;
            return cmd.ExecuteNonQuery();
        }
    }
View Code

   我的类里面只是简单的写了几个增删改查的操作,如果到了实际工作中, 肯定会有不同的需求,这时可以在类里面增添方法以适应需求。

   我把实例化SqlConnection的代码写在了一个静态构造函数里。

    静态构造函数:初始化类的静态数据成员

                              仅在类被加载时执行一次

                               不允许使用访问修饰符

  写在静态构造函数里,只要在其他类里出现SqlHelpClass,数据库帮助类类名,那么SqlHelpClass就算被加载了,不需要实例化就创建好了对数据库的连接。而里面的方法都是静态方法,全部都可以类名点方法名(例:SqlHelpClass.ExecuteNonQuery())就可以实用,重头到尾都不需要实例化SqlHelpClass。

C#学习笔记之数据库帮助类

原文:https://www.cnblogs.com/xwzLoveCshap/p/11540788.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!