问一个SqlCommand和SqlDataReader的问题
看下面代码,整个项目中是不是只创建了一个 SqlCommand对象和一个SqlDataReader对象呢,在调用类中使用了using,DB类中的SqlDataReader是不是不用close了,但是connection怎么关闭。我在看网站优化的时候见别人说,项目中尽量减少对象的创建,我第一次做项目不知道这样做好不好,网站运行没问题。
public class DB
{
//获取webconfig连接字符串
public static readonly string connstr = WebConfigurationManager.ConnectionStrings["Sqlconn"].ToString();
public SqlConnection conn = null;
public SqlCommand cmd = null;
public SqlDataReader reader = null;
//连接数据库返回SqlCommand
public SqlCommand GetCmd(string sql)
{
conn = new SqlConnection(connstr);
conn.Open();
cmd = new SqlCommand(sql, conn);
return cmd;
}
//连接数据库返回datareader
public SqlDataReader GetReader(string sql)
{
reader = GetCmd(sql).ExecuteReader();
{
return reader;
}
}
}
//DAL层一个类中的一个方法举例------------------------------------------------------
public class Commentary
{
//调用公共类DB
DB db = new DB();
List<Model.Commentary> lm = null;
Model.Commentary neirong = null;
public List<Model.Commentary> GetCommentary(int NewsId)
{
lm = new List<Model.Commentary>();
//存储过程
string sql = "exec GetCommentary @NewsId";
using (db.cmd = db.GetCmd(sql))
{
db.cmd.Parameters.Add(new SqlParameter("@NewsId", NewsId));
using (db.reader = db.cmd.ExecuteReader())
{
while (db.reader.Read())
{
neirong = new Model.Commentary();
neirong.CommentaryId = Convert.ToInt32(db.reader["CommentaryId"]);
neirong.CommentaryContent = db.reader["CommentaryContent"].ToString();
neirong.CommentaryDate = DateTime.Parse(db.reader["CommentaryDate"].ToString());
neirong.UserId = Convert.ToInt32(db.reader["UserId"]);
neirong.NewsId = Convert.ToInt32(db.reader["NewsId"]);
lm.Add(neirong);
}
}
}
return lm;
}
}