您的位置:首页 > 数据库

牛腩新闻视频 14讲 重构SQLHelper 助手类 将SQLhelper里面的每个函数 改成可以使用存储过程 //TODO 注释

2011-10-18 11:31 405 查看
上节课 我们有看到 在C#里面 执行 sql语句 和执行  存储过程  实际上就是一行语句的区别  这节课 我们也要把他们合并在一起









先继续在 NewsDAO里面 写代码





记得 如果要使用  DataTable 需要引用 

using System.Data;
using System.Data.SqlClient;

 

下面去 SQLHelper 合并相同的

修改前





修改后





在我们输入前面一个参数  然后输入 逗号  再输入空格之后  IDE会自动定位到  CommandType  很方便





由于我们修改  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层 从新生成一下,这个时候会抱很多错,双击错误就会定位到错误的地方,逐一修改即可







 

最后  用到一个 //TODO  下节课讲用途



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐