最近这几天一直在做B/S项目回顾总结,第一阶段的《牛腩新闻发布系统》刚刚结束,对于整个系统有了一个全新的认识,对于系统中学到的新的知识点又整理了一下,对于每天的回顾内容自己也留下一个痕迹。
关于SqlHelper层中的一段代码分析如下:
这里涉及到了SqlHelper的优化过程,在SqlHelper中主要的操作就是连接、传参和执行,首先构造函数是最先执行的,所以在我们牛老师的代码中有这样一段:
用一个字符串去构建连接,以构造函数为初始化,然后去创建新的对象。
下面的代码是对连接状态的确定,打开连接或者关闭连接:
这里使用ConnectionState连接状态判断,对数据库进行操作,一个if语句保证连接只会打开或者关闭一次。
下面就是对于牛老师写的SqlHelper中的一个查询操作的代码:
为什么使用CommandBehavior.CloseConnection???
应用普通的数据库查询代码如下:SqlConnection con = new SqlConnection(conn_String);
try
{
//打开连接,执行查询
//并且返回SqlDataReader
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = Sql;
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}
finally{
con.close()
}
在读取数据库的时候,我们很难确定应该何时关闭数据库的连接,所以在一般程序中经常出现“对象未关闭”这个错误,在不恰当的时候关闭了数据库的连接会导致执行的代码不会起到任何作用,在上面的代码中,因为程序依赖的连接已经关闭,无法在执行前面的SqlDataReader方法,如果使用CommandBehavior.CloseConnection,它能保证当SqlDataReader关闭的时候,其依赖的连接也会自动被关闭,省去了我们自己判断应该在何时关闭连接操作。
为什么使用using???
使用using的目的是为了调用对象的Dispose()方法,Dispose方法用来释放分配的非托管资源,只有分配了非托管资源的对象才需要调用using,比如SqlConnection 包含的和数据库的连接,就是非托管资源,.Net不能自动释放这些资源,所以SqlConnection实现了Dispose方法释放连接资源,而using则会自动调用SqlConnection的Dispose方法,在调用Dispose方法之前首先要实现IDispose接口。Page_Load事件中的IsPostBack属性:
首先看下面的一段代码:
牛老师把绑定新闻的内容放到了if语句中,这里面的含义深远,我在这里讲解一下真正的原因。
我们单击一个按钮进入代码执行阶段,首先执行的是Page_Load事件,当页面再次进去的时候同样也是执行Page_Load事件,所以,当加载页面并对控件的更改属性进行处理之前,应该先在Page_Load事件中检查该页面是否为被传递回的页面,即要进行IsPostBack的属性的判断。
Ispostback:就是判断页面是首次加载的,还是数据回发(有get或者post请求过的)后的页面。对于首次加载的页面,IsPostBack的值为false,其它时候加载的页面都是回发页面,IsPostBack的值为true。
所以我们把需要处理的内容放到if语句中然后if判断页面为什么时候加载的。
if(!page.isPostBack){
}
截断字符串:/// <summary>
/// 将制定字符串按指定长度进行剪切
/// </summary>
/// <param name="oldStr">需要截断的字符串</param>
/// <param name="maxLength">字符串的最大长度</param>
/// <param name="enWith">超过长度的后缀</param>
/// <returns>如果超过长度,返回截断后的新字符串加上后缀,否则,返回原字符串</returns>
public static string StringTruncat(string oldStr, int maxLength, string enWith)
{
if (string.IsNullOrEmpty(oldStr))
//throw new NullReferenceException("原字符串不能为空");
return oldStr + enWith;
if (maxLength < 1)
throw new Exception("返回的字符串长度必须大于[0]");
if (oldStr.Length > maxLength)
{
string strTmp = oldStr.Substring(0, maxLength);
if (string.IsNullOrEmpty(enWith))
return strTmp;
else
return strTmp + enWith;
}
return oldStr;
}
oldStr表示需要截断的字符串
maxLength表示字符串的最大长度
enWith超过长度的后缀
如果超过长度,返回截断后的新字符串加上后缀,否则,返回原字符串。string.IsNullOrEmpty()是判断字符串是否为空引用或者为空字符串,string.Substring()为截取字符串,string strTmp=oldStr.Substring(0,maxLength)表示从第0位开始一直截取到maxLength位置。