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中.这么做主要针对数据库变动做的优化。方便改动数据库。
阅读全文
0 0
- SQLHelper层对数据库的访问代码
- C# SqlHelper数据库的通用访问代码
- 数据访问层SqlHelper的使用
- 数据访问层SqlHelper的使用
- 数据访问层sqlhelper
- Java访问MySQL数据库的SqlHelper类
- SqlHelper数据库访问类
- java中Oracle数据库访问不完全封装代码(仿.net的SQLHelper,不断升级中)
- Java访问MySQL数据库的SqlHelper类以及测试程序
- 公用SQLHelper类-数据访问层文件
- 对SqlHelper的理解
- C# 对数据库操作的帮助类SQLHelper.cs
- 写了个基于sqlhelper和oracleHelper的通用数据访问层
- SQLHelper.cs类(访问数据库类)
- SqlHelper——数据库访问类
- 编写SQLServer数据库访问类 SQLHelper
- 数据访问层-- 对DataTable的扩展
- 数据访问层-- 对DataSet的扩展
- Mastering C- Concurrency.pdf 英文原版 免费下载
- Vuejs中关于computed、methods、watch的区别
- MyEclipse修改pageEncoding默认编码
- 蓝桥杯 算法提高 9-3摩尔斯电码(Java解题)
- 自定义-流式布局
- SQLHelper层对数据库的访问代码
- redis补充
- 调整数组使奇数全部都位于偶数前面。 杨氏矩阵
- 浅析JavaScript中this储存
- Adapter的作用及用法(四种适配器详解)
- 数据库字段char、varchar和nvarchar的区别
- C++ Concurrency in Action.pdf 英文原版 免费下载
- Android Databinding小记
- arm汇编总结---让汇编不再神秘