首页 新闻 会员 周边

新手问关于ASP.NET的引用问题

0
悬赏园豆:5 [已关闭问题] 关闭于 2011-10-31 20:51

我新建了一个asp.net网站,然后想试试模拟三层架构,之前是在应用程序添加类库,这样做没问题,但是如果直接添加文件夹而不是类库,然后在文件夹里添加类,这样就没办法访问文件夹里的类了,使用using语句导入了命名空间也不行,贴下代码,求高手解决啊,顺便帮忙讲讲三层架构的真正原理理解啊,感觉一直没理解,不甚感激!

一个BLL文件夹,里面有个业务逻辑类Handle.cs,一个DAL类,有一个SQLHelper.cs,然后是web文件夹里有页面Default.aspx

//BLL.Handler.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DALLayer;

namespace BLLLayer
{


///<summary>
/// Summary description for Handler
///</summary>
public class Handler
{
public Handler()
{
//
// TODO: Add constructor logic here
//

}
private static DataSet ds = null;
public static DataSet HandlerData()
{
try
{

ds = SQLHelper.DataSetReader();
if (ds == null)
{
return null;
}
else
{
return ds;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);

}
}
}
}
//DAL.SQLHelper.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace DALLayer
{


///<summary>
/// Summary description for SQLHelper
///</summary>
public class SQLHelper
{
public SQLHelper()
{
//
// TODO: Add constructor logic here
//
}
private static string connString = @"Data Source=localhost;Initial Catalog=StudentInfo; Integrated Security=SSPI";
private static SqlConnection conn = null;

public static void Connecting()
{
conn = new SqlConnection(connString);

}
public static DataSet DataSetReader()
{
try
{
Connecting();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"select * from StudentInfo";
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
return null;
}
finally
{
conn.Close();

}
}
}
}
//Dedault.aspx.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using WebSite1.BLL.BLLLayer;


public partial class Web_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds = Handler.HandlerData();
GridView1.DataSource = ds;
GridView1.DataBind();
}
}
龙华死神的主页 龙华死神 | 初学一级 | 园豆:190
提问于:2011-10-28 09:37
< >
分享
所有回答(5)
0

好像应该把BLL、DAL、Model层都放在跟网站的同一级别目录下面吧。。。。

iFishbone | 园豆:177 (初学一级) | 2011-10-28 10:06
0

BLL、DAL、Model可以是三个项目,网站程序也是一个项目,这样再在网站程序中添加对上述三个项目的引用,当然这四个项目都在一个解决方案里比较好。还有就是直接放在App_Code里面。个人理解,呵呵。

youyi000 | 园豆:205 (菜鸟二级) | 2011-10-28 10:15
0

给你个最直接的三层结构理解:

1.开始你用了sql server ,asp.net 开发了一个网站,以验证用户名密码为例:从sql server中select 输入的用户名密码,存在就通过验证,然后响应网页给客户端。

2.随着用户量的增多或其他原因,数据库需要用oracle,那你以前的数据访问方法就失效了,需要重写数据访问类,如果你的数据访问又夹杂着逻辑什么的那你悲剧了,一不小心就改错了逻辑。。。所以就需要把数据访问单独放在一个project里,(按上例)数据访问就是从数据库取得用户输入的用户名密码,有没有对应用户跟数据访问层没关系,只把结果返回逻辑层就行了。那以后换数据只需要另外写一套对应的api即可,逻辑接触不到也不需要关心,省力又减少出错。

3.为了适应用户习惯,他们想要一个桌面软件,类似qq,aliww的,(按上例)如果你把验证用户名密码的方法写在了aspx.cs页面里的话那你悲剧了,又要在winform里重写copy一个方法,但你方法接收参数用的是request.form那更悲剧了,一不小心又把逻辑改错了。。。所以就需要一个project专门来写逻辑,逻辑层接收了表示层传过来的用户名密码,传递给数据层,接收数据层的结果做出判断,又返回给表示层用来显示登录成功跳转或失败。

后来人们为了能随时更换数据访问层就把数据访问层的dll名字写在配置文件里,可以随时更改,就是所谓的ioc

失落小羊 | 园豆:58 (初学一级) | 2011-10-28 11:26

将数据访问,逻辑都放在website的好处是开发快,如果做个网站玩玩也可以这么做,如果要运营的项目就需要多层架构了,而且面向对象会比较重要

支持(0) 反对(0) 失落小羊 | 园豆:58 (初学一级) | 2011-10-28 11:29

这个。。。。。。

支持(0) 反对(0) 龙华死神 | 园豆:190 (初学一级) | 2011-11-05 23:44
0

这个是由于asp.net网站与asp.net web应用程序在编译时的差异,网站在编译时,生成的是一个随机的应用程序集;asp.net web应用程序生成的是一个唯一的程序集。

deajosha | 园豆:205 (菜鸟二级) | 2011-10-28 15:20
0

Using BLLLayer试一下吧

Byron_2015 | 园豆:191 (初学一级) | 2011-10-30 15:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册