牛腩新闻视频 14讲 重构SQLHelper 助手类 将SQLhelper里面的每个函数 改成可以使用存储过程 //TODO 注释
2011-10-18 11:31
405 查看
上节课 我们有看到 在C#里面 执行 sql语句 和执行 存储过程 实际上就是一行语句的区别 这节课 我们也要把他们合并在一起
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/07582f1aac21c210068d820e3749f5a0.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/563b0d12e50d7cde2b57730f3ad8c554.png)
先继续在 NewsDAO里面 写代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/5aa89ea7ee0777ac33974eb0cca4eff7.png)
记得 如果要使用 DataTable 需要引用
using System.Data;
using System.Data.SqlClient;
下面去 SQLHelper 合并相同的
修改前
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/563b0d12e50d7cde2b57730f3ad8c554.png)
修改后
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/0560fc66e1d5d1a92cd0bf125a58e224.png)
在我们输入前面一个参数 然后输入 逗号 再输入空格之后 IDE会自动定位到 CommandType 很方便
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/9489b4357de84725f81b6c767a2bc550.png)
由于我们修改 SQLHelper 那么 我们也要对 CategoryDAO 进行修改
下面是修改完成之后的代码
因为我们修改了很多代码,然后我们把DAL层 从新生成一下,这个时候会抱很多错,双击错误就会定位到错误的地方,逐一修改即可
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/52642e54fcadc50019d6ece6748eb95c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/e11dfd0004165d0331ae0d30e83a909f.png)
最后 用到一个 //TODO 下节课讲用途
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/fbb0820bf32ef45fe83a1116c1fc2ae7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/07582f1aac21c210068d820e3749f5a0.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/563b0d12e50d7cde2b57730f3ad8c554.png)
先继续在 NewsDAO里面 写代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/5aa89ea7ee0777ac33974eb0cca4eff7.png)
记得 如果要使用 DataTable 需要引用
using System.Data;
using System.Data.SqlClient;
下面去 SQLHelper 合并相同的
修改前
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/563b0d12e50d7cde2b57730f3ad8c554.png)
修改后
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/0560fc66e1d5d1a92cd0bf125a58e224.png)
在我们输入前面一个参数 然后输入 逗号 再输入空格之后 IDE会自动定位到 CommandType 很方便
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/9489b4357de84725f81b6c767a2bc550.png)
由于我们修改 SQLHelper 那么 我们也要对 CategoryDAO 进行修改
下面是修改完成之后的代码
/* *创建人:李鹏 *创建时间:2011-10-04 11:44 *说明:数据库的助手类 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace DAL //data access layer 数据存储访问层 { public class SQLHelper { private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDataReader sdr = null; public SQLHelper() { //构造函数 默认执行 //string connStr = @"server=JOEY\SQL2008;database=newssystem;uid=sa;pwd=tiantang"; conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString); } private SqlConnection GetConn() { if (conn.State == ConnectionState.Closed) { conn.Open(); } return conn; } //下面的每个方法 都可以执行 sql 语句 也可以执行 存储过程 /// <summary> /// 执行不带参数的增删改SQL语句 或者是 存储过程 /// </summary> /// <param name="cmdText">增删改SQL语句 或者是 存储过程名称</param> /// <param name="ct">cmd的命令类型CommandType</param> /// <returns></returns> public int ExecuteNonQuery(string cmdText, CommandType ct) { int res; try { cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; res = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } } return res; } /// <summary> /// 执行带参数的 Sql增删改语句 或存储过程 /// </summary> /// <param name="cmdText">增删改SQL语句 或者是 存储过程名称</param> /// <param name="paras">参数集合</param> /// <param name="ct">命令类型</param> /// <returns></returns> public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(cmdText, GetConn())) //using (cmd = new SqlCommand("insert into category values(@caName)", GetConn())) { // cmd.Parameters.AddRange(new SqlParameter[]{ // new SqlParameter("@caName","哈哈新闻") //}); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); //这里的paras 就相当于是一个 参数集合 res = cmd.ExecuteNonQuery(); } return res; } /// <summary> /// 执行SQL查询语句 或者 存储过程 /// </summary> /// <param name="cmdText">查询SQL语句 或者是 存储过程名称</param> /// <param name="ct">命令类型</param> /// <returns></returns> public DataTable ExecuteQuery(string cmdText, CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } //CommandBehavior.CloseConnection 在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭 // sdr 也会自动关闭的 因为 using 会结束 sdr 而 conn 是被 CommandBehavior.CloseConnection 结束的 return dt; } /// <summary> /// 执行带参数的SQL查询语句 或 存储过程 /// </summary> /// <param name="cmdText"> 查询SQL语句 或者是 存储过程名称</param> /// <param name="paras">参数集合</param> /// <param name="ct">命令类型</param> /// <returns></returns> public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } //CommandBehavior.CloseConnection 在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭 // sdr 也会自动关闭的 因为 using 会结束 sdr 而 conn 是被 CommandBehavior.CloseConnection 结束的 return dt; } } }
因为我们修改了很多代码,然后我们把DAL层 从新生成一下,这个时候会抱很多错,双击错误就会定位到错误的地方,逐一修改即可
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/52642e54fcadc50019d6ece6748eb95c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/e11dfd0004165d0331ae0d30e83a909f.png)
最后 用到一个 //TODO 下节课讲用途
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/12/fbb0820bf32ef45fe83a1116c1fc2ae7.png)
相关文章推荐
- 牛腩新闻视频 08讲 重构SQLHelper 将重复的内容 放到 构造函数里面 以及 try catch 和 using 和连接字符串
- 牛腩新闻视频 06讲 编写SQLHelper 如何开始搭配3层架构
- 牛腩新闻发布系统(二):SQLHelper重构(二)
- 牛腩新闻发布系统笔记10:再次重构SQLHelper
- ubuntu 14 编译视频第三方库ijkplayer,可以在winows下使用
- 牛腩新闻发布系统(二):SQLHelper重构(二)
- 牛腩新闻发布系统(一):SQLHelper重构(一)
- 翻译《有关编程、重构及其他的终极问题?》——28.如果你可以使用简单的函数就不要使用宏
- ubuntu 14 编译视频第三方库ijkplayer,可以在winows下使用
- 牛腩新闻发布系统(一):SQLHelper重构(一)
- 牛腩新闻视频 05讲 数据表操作类设计 要知道每个数据库表的操作类要干什么 以及 数据库和C#的命名规范
- 牛腩新闻发布系统笔记4:重构SQLHelper
- 【牛腩新闻发布系统】——添加存储过程后重构SQLHelper
- (2)int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
- 例题:把一个超市购物的题做成函数。这个题做成函数没有必要,但可以了解输入参数,输出参数,返回值,函数体,还有结构体,ArryList集合,for循环算结果,以及集合里 .count的使用
- 牛腩新闻发布系统——存储过程使用
- 牛腩新闻 61尾声: error.aspx的使用 防止报错
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- 构造函数跟析构函数里面都可以调用虚函数
- 使用VAssistX为VS2008 c++代码添加函数头注释http://blog.sina.com.cn/s/blog_4aff4b970101bfqs.html