看下面代码,整个项目中是不是只创建了一个 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;
}
}
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;
}
}
解决方案 »
- 新手学asp.net,iis问题,.aspx文件访问不了
- 大哥大姐帮我进来看下我的ajax哪里错了
- 在js里面如果取得table里面的checkbox集会
- 关于上传文件的删除问题!
- sql语句通过时间字段进行排序,当时间字段有一样的时间值时数据会丢失
- 看看这个问题怎么样解决,散分28,解决者50分!
- Fileupload 控件无法上传大文件
- 动态加载master有什么方法?
- 高分求 正则表达式,提取相对路径
- 关于datalist中的<%# DataBinder.Eval(Container.DataItem, "size") %>
- VS2008 SQLDATASOURCE生成的SQL中大于符号自动变成>
- .net 生成world对象时提示输入用户名和密码
建议看看msdn。。使用using 会自动释放的。