日期:2014-05-18  浏览次数:20471 次

菜鸟巨强问题
在三层结构中
通常表示层有个方法调用业务逻辑层,业务逻辑层调用数据访问层的方法访问数据
那么SQL语句放在哪一层呢(select   *   from   ...)
是作为参数在表示层一路传到数据访问层
又或者是直接写在数据访问层呢
通常是怎么做的?




------解决方案--------------------
存储过程  数据访问层
------解决方案--------------------
一般是写在数据访问层吧?
不确定
------解决方案--------------------
一般是写在数据访问层,但是如果该条语句需要进行很多逻辑运算才能得到具体完整的语句的话,可能要放在业务逻辑层
------解决方案--------------------
数据层:
protected int RunCommand(commandText)
{
......
//建立数据库连接
//根据接收到的commandText并执行它
//返回受影响的行数
//关闭连接
}

业务层:
public bool UserRegister(string name,string password)
{
string commandText = "insert into [myTable] ([name],[password]) values ( "+name+ ", "+password+ ") ";
if(RunCommand(commandText) == 1)
return true;
else
return false;
}

表现层,.cs文件注册按钮事件中:
......
if(myObj.UserRegister(this.txtName.Text,this.txtPassword.Text))
{
Response.Write( "注册成功! ");
}

看到没有,表现层只管调用业务层的方法,业务层中已封装了逻辑操作;而业务层只管调用数据层的共用方法,它不关心数据库的连接、打开、关闭等等,上面例子业务层是一个用户注册的方法,如果用户发布消息、添加记录、总之只要是向数据库里插入记录的操作,你都可以调用数据层的RunCommand,这就是三层开发的好处之一:代码可重用性。你想想,如果一个大的项目有成百上千个业务方法,难道在每个方法中都得Connection、然后Connection.Open,最后Connection.Close?这样不得烦死。楼主慢慢体会一下吧...

------解决方案--------------------
应该是dal