参数通过类C#

时间:2015-11-25 13:34:29

标签: c# visual-studio-2015

我是C#的新手,我有一个问题,我尝试将一个变量从一个类传递到另一个类。

我有一个业务层,我收集变量并告诉他们去哪里,我还有一个UI层,我想在点击一个按钮时激活该方法。

UILayer:

private void btnLog_Click(object sender, EventArgs e)
{
    BusinessLayer BUS = new BusinessLayer();
    BUS.InsertLog(dunno how to reference variables here);
}

BusinessLayer:

public void InsertLog(int CustomerId,
                      DateTime DateLogged,
                      string CustomerRef,
                      int AssignedEmployeeId,
                      string Description,
                      int ImpactId,
                      string RootCause,
                      string RootFix,
                      int StatusId,
                      DateTime FixDate,
                      float TimeUsed,
                      string InternalRef)
{
    DataLayer dao = new DataLayer();

    dao.CommandSqlStatement("INSERT Region (CustomerId,
                                            DateLogged,
                                            CustomerRef,
                                            AssignedEmployeeId,
                                            Description,
                                            ImpactId,
                                            ImpactBrief,
                                            RootCause,
                                            RootFix,
                                            StatusId,
                                            FixDate,
                                            TimeUsed,
                                            InternalRef) " +
                            "VALUES (" + CustomerId + ", " + 
                                         DateLogged + ", '" +
                                         CustomerRef + "', " +
                                         AssignedEmployeeId + ", '" +
                                         Description + "', " +
                                         ImpactId + ", '" +
                                         RootCause + "', '" +
                                         RootFix + "', " +
                                         StatusId + ", " +
                                         FixDate + ", " +
                                         TimeUsed + ", '" +
                                         InternalRef);
}

我只是想知道如何在UILayer中引用变量,因为我已经尝试了几种方法,似乎无法弄明白, 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

我假设您在UILayer中可以使用所有这些值,因此您只需将InsertLog方法中的所有参数值放入对方法的调用中

private void btnLog_Click(object sender, EventArgs e)
{
    BusinessLayer BUS = new BusinessLayer();
    BUS.InsertLog(CostumerId, dateLogged, costumerRef, etc);
}

如果你在UILayer中没有这些值,你只需要从某个地方获取它们。这取决于你分配它们的位置。

答案 1 :(得分:0)

要回答你的问题,我会做一些假设来理解这个问题。您有一个包含TextBox等控件的表单,其中包含Log的值,如果不是,您知道需要将哪些值传递给InsertLog方法。然后你可以简单地调用方法,并传递所需的参数。

要从控件中获取值,您可以这样做 -

BUS.InsertLog(txtBoxCostumerId.Text, /*more parameters */)

或者直接将值改为 -

BUS.InsertLog(costumerId /*more parameters */)

备注 -

  1. 建议不要在SQL查询中直接使用值,而是使用Parameters,因为它们容易出现SQL注入

  2. 与业务类一样,参数不应太多,将参数限制为最多tw0或3,如果需要,请使用DTO对象

答案 2 :(得分:0)

首先,在您的类中声明要传递给BL的变量列表:

    int CustomerId, AssignedEmployeeId, ImpactId, StatusId;
    string InternalRef, CustomerRef, Description, RootCause, RootFix;
    DateTime DateLogged, FixDate;                         
    float TimeUsed;

然后,编写一个方法,为每个变量分配所需的值:

   private void bindDataBeforeSending()
   {
      CustomerRef = Request.Form["CustomerId"]; // for example
      ...
   }

然后,调用以正确顺序传递变量的方法:

     private void btnLog_Click(object sender, EventArgs e)
    {
        bindDataBeforeSending();

        BusinessLayer BUS = new BusinessLayer();      
        BUS.InsertLog(CustomerId,DateLogged,CustomerRef,AssignedEmployeeId,Description,ImpactId,RootCause,RootFix,StatusId,FixDate,TimeUsed,InternalRef);
    }

如果UI和BL属于两个不同的项目,请务必在UI参考中包含BL。