作为第一个进行的Web系统,新闻发布系统的后台代码和之前编写的机房没有太大的区别,下面主要通过SQLHelper()方法的创建和重构总结下新闻系统的后台。
首先是画用例图、类图、进行数据库的设计!这里不做详细说明每个系统开始的工作。然后编写D层代码SQLHelper(),以ExecuteNonQuery()方法来简单描述SQLHelper()的几次重构
1.主要结构
原来是针对单个的一个功能写一个方法,这里将方法的主要结构拿出,通过传入sql语句来执行类似的操作。
public int ExecuteNonQuery(string sql)
{
string connStr ="server=liangliangPC;database=newssystem;user id=sa;password=123456";
SqlConnection conn = newSqlConnection(connStr);
conn.Open();
SqlCommand cmd = newSqlCommand(sql, conn);
int res = cmd.ExecuteNonQuery();
conn.Close();
return res;
}
2.抽取共同点
sqlhelper()中的几个方法,将实例化SqlCommand等相同的内容抽出来。
SqlConnection链接字符串以配置文件的方式实现。
使用try catch语句块或using(),using()当函数的中的内容执行完毕之后自动关闭数据库连接释放资源。
public int ExecuteNonQuery(string sql)
{
int res;
try
{
cmd = new SqlCommand(sql,GetConn());
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex ;
}
finally
{
if (conn.State ==ConnectionState.Open)
{
conn.Close();
}
}
return res;
}
3.添加参数
主要是防止sql注入,关于sql注入的问题,新闻系统中只是讲解了拼接字符串的方式,其他的方式有兴趣的话可以在网上搜索哈!
public int ExecuteNonQuery(stringsql, SqlParameter[] paras)
{
int res;
using (cmd = new SqlCommand(sql ,GetConn()))
{
cmd.Parameters.AddRange(paras);
res = cmd.ExecuteNonQuery();
}
return res;
}
4.存储过程和触发器
sql语句的另一种实现方式,只是他们写在数据库中
使用的时候通过调用名称,代码中添加 cmd.CommandType
=CommandType.StoredProcedure;即可
public int ExecuteNonQuery(stringcmdText, CommandType ct, SqlParameter[] paras)
{
int res;
using (cmd = new SqlCommand(cmdText, GetConn()))
{
cmd.Parameters.AddRange(paras);
cmd.CommandType = ct;
res = cmd.ExecuteNonQuery();
}
return res;
}
总结:在通过对SQLHelper()的几次重构中完成了新闻后台代码!关于存储过程和触发器已经有人写过不少博客就不在描述了,重点还是sql语句的使用。