【问题标题】:Update the code according to Standard根据标准更新代码
【发布时间】:2010-02-24 09:24:20
【问题描述】:

使用 VB.Net、C#.Net 和 SQL Server。

Windows 应用程序

我想为 3 层架构(表示层、数据访问层、 业务逻辑层)。

代码。

Form_Load

    Dim cmd As New SqlCommand
    Dim ada As New SqlDataAdapter
    Dim ds As New DataSet

    Con = New SqlConnection("Data Source='" & servername.Text & "';Initial  Catalog='"     & databasename.Text & "';Integrated Security=true")
                    Con.Open()

        cmd = New SqlCommand("Select * from tb1", Con)
        ada = New SqlDataAdapter(cmd)
        ada.Fill(ds, "tb1")
        datagrid2.DataSource = ds.Tables("tb1")

上面的代码可以工作,但我想通过使用 3 层架构来做同样的过程。

如何根据 3 层架构分离我的代码。

需要 VB.Net 代码帮助

【问题讨论】:

  • 你的 3 层是什么?您如何将它们分开?
  • @Oded - 这就是我要问的,我提到了一个简单的,如果我想通过使用 3 层架构来执行相同的过程

标签: c# sql-server vb.net


【解决方案1】:

您可以为除 UI 层之外的每一层创建一个类库项目。然后你必须将每个过程分解到这 3 层。例如,在数据访问层中进行每个数据访问,并将每个逻辑放在逻辑层中。在 UI 上,您不能直接使用 DAL。你应该只调用在 BLL 中定义的方法。

注意:通过添加每层的 dll 作为对 UI 项目的引用,将这些层添加到 UI。

DAL

public DataSet GetData(string serverName,string dataBaseName)
{
    SqlCommand cmd;
    SqlDataAdapter ada;
    DataSet ds = new DataSet();
    SqlConnection Con;

    Con = New SqlConnection("Data Source='" & serverName & "';Initial  Catalog='"  & dataBaseName & "';Integrated Security=true");
     Con.Open();

        cmd = New SqlCommand("Select * from tb1", Con);
        ada = New SqlDataAdapter(cmd);
        ada.Fill(ds, "tb1");
        return ds;
}

BLL

public DataSet GetData(string serverName,string dataBaseName)
{
    DataSet ds = new DataSet();
    ds = DoAction(new DAL().GetData(serverName, dataBaseName)); //do something on data 
    return ds;
}

用户界面

datagrid2.DataSource = new BLL().GetData(servername.Text,databasename.Text);
datagrid2.DataMember = "tb1";
datagrid2.DataBind();

【讨论】:

  • @Masoud。我是 3 层架构的新手。我理解你的代码。谢谢你。在开始 3 层架构之前。我必须执行哪些步骤,例如添加类文件等? “通过添加每层的 dll 作为对 UI 项目的引用,将这些层添加到 UI”是什么意思?
  • 你的每一个应用程序都变成了一个dll文件。您也可以在 UI 中将这些层作为每个层的一个类。如果您接受此答案,请接受其他用户使用。 :)
  • @Masoud - 当我尝试运行您的代码时,“DoAction”中显示错误
  • DaAction 是一个示例方法,如果您需要,您可以实现它。你可以删除它。
  • @Masoud - 我像这样传递 ServerName 和数据库 datagrid2.DataSource = new BLL().GetData("Server1", "database1");我删除了这一行“datagrid2.DataBind();”然后在datagridview中运行什么都不显示,当我添加这一行datagrid2.databind()它显示错误
【解决方案2】:

以下代码应在您的表示层上

 Datagrid2.DataSource = ds.Tables("tb1")

下面的层应该在你的数据访问层上

 Dim cmd As New SqlCommand 
 Dim ada As New SqlDataAdapter 
 Dim ds As New DataSet 

 Con = New SqlConnection("Data Source='" & servername.Text & "';Initial  Catalog='"     & databasename.Text & "';Integrated Security=true") 
 Con.Open() 

下面的代码应该在你的业务逻辑层

cmd = New SqlCommand("Select * from tb1", Con)    
ada = New SqlDataAdapter(cmd)    
ada.Fill(ds, "tb1")

但我强烈建议不要使用类似的东西,使用像 NHibernate 或 EntityFramework 这样的 ORM 或至少来自 LinkToSql

【讨论】:

  • @Nasser - 感谢您的回复,但这段代码看起来很简单。如何根据标准更改此代码。
  • @Nasser - ORM 像 NHibernate,或 EntityFramework 或 LinkToSql 手段?我不会使用相同的查询。我将使用存储过程而不是从表中选择一个值。还有其他标准吗?
  • 为什么要将 SQL 对象放入 BLL 而不是它所属的 DLL?
  • @HardCode,因为 Gopal 想在 3 层使用他的代码,而 bll 中没有代码和他的代码。除非我们像 Masoud 那样创建自己的方法。
猜你喜欢
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 2014-02-01
  • 1970-01-01
相关资源
最近更新 更多