接触ASP.NET有两个月了,试着看了一下三层的概念,看别人的能理解,但是有点模糊,于是就想把三层应用到自已写
过的一个WEB程序中,虽然程序是没问题的,但是不知道写的对不对,大家帮着看看,希望能提出意见,建议和批评,谢谢!表现层的代码把数据显示到DataGrid中:
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
//引用中间层的DT()方法
dg_News.DataSource =hz2.InterService.DT();
dg_News.DataBind ();
}
}中间业务层的代码:
public static DataTable DT()
{
string str_sql="select id,szss,coidlink from 国际商业信息1";
//引用数据层的GetSqlData方法
DataTable dt_sql=Class.DataAccess.GetSqlData (str_sql);
return dt_sql;
}数据层的代码:
public static string ConnectionStrBySql
{
get
{
return System.Configuration.ConfigurationSettings .AppSettings["ConnSql"];
}
}public static DataTable GetSqlData(string sql)
{
DataSet ds = new DataSet();
SqlDataAdapter dsCommand = new SqlDataAdapter();
SqlConnection conn = new SqlConnection(ConnectionStrBySql);
SqlCommand sqlCommand = new SqlCommand(sql,conn);
sqlCommand.CommandType = CommandType.Text;
try
{
conn.Open();
dsCommand.SelectCommand = sqlCommand;
dsCommand.Fill(ds);
}
catch
{
}
finally
{
conn.Close();
dsCommand.Dispose();
}
return ds.Tables[0];
}

解决方案 »

  1.   

    public static DataTable DT()
    {
    string str_sql="select id,szss,coidlink from 国际商业信息1";
    //引用数据层的GetSqlData方法
    DataTable dt_sql=Class.DataAccess.GetSqlData (str_sql);
    return dt_sql;
    }
    代码复用性...
    你这个返回DataTable的方法就只用一次么?
    sql语句是表示层传进来的
    public static DataTable DT(string str_sql)
    {
    //引用数据层的GetSqlData方法
    DataTable dt_sql=Class.DataAccess.GetSqlData (str_sql);
    return dt_sql;
    }
      

  2.   

    to ustbwuyi() :因为我现在做的仅仅是一个演示,所以这个返回DataTable的方法DT()就只是用一次,我还没考虑多次重用这个方法的问题,能给点提示吗?sql语句是表示层传进来的?
    ------
    表示层是不是应该出现SQL语句?
      

  3.   

    修改如下:数据层(只写SQL语句和数据操作类):
    public static string db_sql()
    {
    return "select id,szss,coidlink from 国际商业信息1";
    }public static DataTable GetSqlData(string sql)
    {
    DataSet ds = new DataSet();
    SqlDataAdapter dsCommand = new SqlDataAdapter();
    SqlConnection conn = new SqlConnection(ConnectionStrBySql);
    SqlCommand sqlCommand = new SqlCommand(sql,conn);
    sqlCommand.CommandType = CommandType.Text;
    try
    {
    conn.Open();
    dsCommand.SelectCommand = sqlCommand;
    dsCommand.Fill(ds);
    }
    catch
    {
    }
    finally
    {
    conn.Close();
    dsCommand.Dispose();
    }
    return ds.Tables[0];
    }
    中间层(写业务逻辑并执行数据层的SQL语句):
    public static DataTable DT(string str_sql)
    {
    DataTable dt_sql=Class.DataAccess.GetSqlData (str_sql);
    return dt_sql;
    }表现层(把数据表现在控件中):
    private void DGBind()
    {
    dg_News.DataSource =hz2.InterService.DT(hz2.DBManage.db_sql());
    dg_News.DataBind ();
    }这回中间层的方法DT就可以实现重用了不知道我的想法对不对......
      

  4.   

    支持楼上把sql的组装放数据层
      

  5.   

    sql语句是不是应该在表示层出现,我个人认为是要看项目具体情况。
    如果是小项目,表示层的东西不多,完全可以将sql语句从表示层传进去,因为一旦有需求变化,表示层要改的地方不多(因为表示层的东西本来就不多),当然,sql语句放在数据层也可以,不过这种情况放在表示层更方便。
     对于大一点的项目,我的建议是将sql语句放在数据层,表示层只传页面获取的参数进去..
      

  6.   

    eastjazz(德仔&我是小仔仔 www.dezai.cn):在表示层中是没有出现数据层的操作,因为我的程序简单啊:)没有复杂的逻辑,我想等以后有逻辑的时候再放进去