SQLHelper层对数据库的访问代码

来源:互联网 发布:孟加拉海关数据 编辑:程序博客网 时间:2024/05/18 03:49

这里我就不啰嗦了,直入主题。

就拿我敲的“牛腩新闻发布系统”为例,讲解代码。

先看一种最为简单明了的访问数据库的代码;

    具体代码意思在里面有注释。

//需要添加引用
using System.Data;using System.Data.SqlClient;namespace DAL{    public class SQLHelper    {        //增删改sql语句        public int ExecuteNonQuery()        {            string connStr = "server=. ; database=newssystem; uid=sa; pwd=123";//数据库连接字符串            SqlConnection conn = new SqlConnection(connStr);//(对数据库的其中一个操作),连接数据库            conn.Open();            string sql = "select * from category";//sql语句            SqlCommand cmd = new SqlCommand(sql );//执行sql语句            int res = cmd.ExecuteNonQuery();//返回受影响行数            return res;        }
//查询sql语句        public DataTable ExecuteQuery()        {            string connStr = "server=. ; database=newssystem; uid=sa; pwd=123";//数据库连接字符串            SqlConnection conn = new SqlConnection(connStr);//(对数据库的其中一个操作),连接数据库            conn.Open();//打开连接            string sql = "insert into category(name) values('体育新闻')";//要执行的sql语句            SqlCommand cmd = new SqlCommand(sql );//执行sql语句            SqlDataReader sdr = cmd.ExecuteReader();//返回SqlDataReader类型数据            DataTable dt = new DataTable();            dt.Load(sdr);//将SqlDataReader类型数据填充datatable            sdr.Close();//关闭            conn.Close();//关闭            return dt; ;        }    }}


有没有发现这么写。。。比较繁琐。所以,这并不是优秀的代码,因此,我们需要探索更为优秀的代码怎么写!!

重构一;

//需要添加引用
using System.Data;using System.Data.SqlClient;namespace DAL{    public class SQLHelper    {        private SqlConnection conn = null;        private SqlCommand cmd = null;        private SqlDataReader sdr = null;        public SQLHelper()//构造函数中连接数据库        {            string connStr ="server =. ; database =newssystem; uid =sa;pwd=123" ;//数据库连接字符串            conn = new SqlConnection(connStr);//(对数据库的其中一个操作),连接数据库        }        private SqlConnection GetConn()//打开Conn连接        {            if (conn.State == ConnectionState.Closed)            {                conn.Open();            }            return conn;        }        /// <summary>        /// 该方法执行传入的增删改sql语句        /// </summary>        /// <param name="sql">要执行的增删改sql语句</param>        /// <returns>返回更新记录数</returns>        public int ExecuteNonQuery(string sql)        {            int res;            try            {                cmd = new SqlCommand(sql, GetConn());//sql命令执行                res= cmd.ExecuteNonQuery();//返回受影响行数            }            catch (Exception ex)            {                throw ex ;            }            finally            {                if ( conn.State ==ConnectionState .Open )                {                    conn.Close();                }            }            return res;        }        /// <summary>        /// 执行查询sql查询语句        /// </summary>        /// <param name="sql">sql查询语句</param>        /// <returns>返回datatable表</returns>        public DataTable ExecuteQuery(string sql)        {            DataTable dt = new DataTable();            cmd = new SqlCommand(sql, GetConn());            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//返回SqlDataReader类型数据                        {                   dt.Load(sdr);//将SqlDataReader类型数据填充datatable            }            return dt;        }    }}

这次到代码中,为了方便关闭数据库连接,我们运用了try{...}catch{...}finally{...}和using(...){...}  。

  使用try{...}catch{...}finally{...}主要为了保证即使出错了,都会 执行finally里的语句,也就是关闭数据库。

  使用using(...){...}更为方便。在这里意思就是当sdr关闭时,Conn也会跟着关闭。

重构二:

//需要添加引用
using System.Data;using System.Data.SqlClient;using System.Configuration;namespace DAL{    public class SQLHelper    {        private SqlConnection conn = null;        private SqlCommand cmd = null;        private SqlDataReader sdr = null;        public SQLHelper()//构造函数中连接数据库        {            string connStr =ConfigurationManager .ConnectionStrings["connStr"] .ConnectionString    ;//数据库连接字符串            conn = new SqlConnection(connStr);//(对数据库的其中一个操作),连接数据库        }        private SqlConnection GetConn()//打开Conn连接        {            if (conn.State == ConnectionState.Closed)            {                conn.Open();            }            return conn;        }        /// <summary>        /// 该方法执行传入的增删改sql语句        /// </summary>        /// <param name="sql">要执行的增删改sql语句</param>        /// <returns>返回更新记录数</returns>        public int ExecuteNonQuery(string sql)        {            int res;            try            {                cmd = new SqlCommand(sql, GetConn());//sql命令执行                res= cmd.ExecuteNonQuery();//返回受影响行数            }            catch (Exception ex)            {                throw ex ;            }            finally            {                if ( conn.State ==ConnectionState .Open )                {                    conn.Close();                }            }            return res;        }        /// <summary>        /// 执行查询sql查询语句        /// </summary>        /// <param name="sql">sql查询语句</param>        /// <returns>返回datatable表</returns>        public DataTable ExecuteQuery(string sql)        {            DataTable dt = new DataTable();            cmd = new SqlCommand(sql, GetConn());            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//返回SqlDataReader类型数据                        {                   dt.Load(sdr);//将SqlDataReader类型数据填充datatable            }            return dt;        }    }}

  <connectionStrings>      <add name ="connStr" connectionString ="server =. ; database =newssystem; uid =sa;pwd=123"></add>    </connectionStrings>

这里的改变就是把连接服务器数据库的过程放到了外部文本文件web.config中.这么做主要针对数据库变动做的优化。方便改动数据库。


原创粉丝点击