介绍
牛腩新闻发布系统,是前后台分离的,一个将Sql server, asp.net,c#,jQuery,以及三层架构的小型系统,在这一项目中,我们从无到有,从设计说明书开始到最后的打包,发布.我们实现了一般新闻系统的基本功能
摘要
这一项目中,收获颇多,下面我将对下面几个方面进行总结<
1三层结构
三层结构是将UI层,业务逻辑层,数据访问层独立起来的一种模式架构,以至于显示工作中我们能够独立开发各自模块.
DAL(数据访问层)
数据库访问:
业务逻辑最重要的就是与数据库进行访问,访问数据库的核心代码段有如下:
–创建数据源:
SqlConnection conn = new SqlConnection();
创立连接(能够指定具体的数据从哪里来)
conn.ConnectionString = “data source = (local);initial catalog = test; user id = sa;password = sa”;
-建立与数据源相对应的命令对象
sqlcomment cmd=conn.CreateCommand();
-加入要执行的sql语句:
String sql = “这里是要执行的sql语句 “;(由于sql语句容易错,且需要对数据库操作,所以建议在数据库中用查询试好,直接复制来用)
cmd.commandText=sql;
–执行cmd 命令
cmd.ExecuteNonQuery();
通过using 语句,能够不必代码释放空间完整代码如下:
using (SqlConnection conn = new SqlConnection(DBUtil.ConnString))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @”SELECT ID,UserName,PassWord,Email
FROM USERS WHERE UserName = @UserName AND Password= @ Password”;
//sql 文本
//这里叫做声明变量,也就是上边cmd 语句中用到的变量.
cmd.Parameters.Add(new SqlParameter(“@UserName”, userName));
cmd.Parameters.Add(new SqlParameter(“@PassWord”,passWord ));
cmd.ExecuteNonQuery();
}
创建SQLHelper类
SQLHelper类是为了便于数据访问,同时对相同代码段提取实现代码复用的效果.,由于通常情况下我们不太明确BLL与DAL的界限,一般情况下我们有俩中方式,体现在SQlHelper 类中,如下:
–传入sql语句的方式(将增,删,改能够整合)
public int ExecuteNonQuery(string sql, CommandType ct)
{
//连接字符串
string conStr = @”server=.;database=newssystem;uid=sa;pwd=123456”;
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.CommandType =ct;
int res = cmd.ExecuteNonQuery();//返回受影响行数
return res;
}
}
查询:
public DataTable ExecuteQuery(string sql,CommandType ct)
{
//dt 作为一个容器,接受一起table
DataTable dt = new DataTable();
string conStr = @”server=.;database=newssystem;uid=sa;pwd=123456”;
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.CommandType = ct;
// sqlDataReader 是只读查询,将结果放入了sdr,是只读查询
SqlDataReader sdr= cmd.ExecuteReader ();
dt.Load(sdr);
}
return dt;
}
–不带sql语句,直接传入参数(由于增删改的sql语句不一样,所以这三个不能整合到一起,但是三个函数相同的代码可以整合)
举例:
public LoginModel SelectUser(string userName, string passWord)
{
using (SqlConnection conn = new SqlConnection(connstr.ConnString))
{//ConnString在外边已经定义,是一个string 常量
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @”SELECT ID,UserName,PassWord,Email
FROM USERS WHERE UserName = @UserName AND Password=@Password”;
//sql 文本
//这里叫做声明变量,也就是上边cmd 语句中用到的变量.
cmd.Parameters.Add(new SqlParameter(“@UserName”, userName));
cmd.Parameters.Add(new SqlParameter(“@PassWord”,passWord ));
SqlDataReader reader = cmd.ExecuteReader();//提供只读,单向的数据传输
LoginModel.UserInfo user = null;//构造业务数据模型
while (reader.Read ())//读完全部记录
{
if (user ==null )
{
user = new LoginModel.UserInfo();
}
user.ID1 = reader.GetInt32(0);
user.UserName1 = reader.GetString(1);
user.Password1 = reader.GetString(2);
if (!reader.IsDBNull (3))
{
user.Email1 = reader.GetString(3);
}
}
return user;
}
}