asp.net代码质量检查一下

时间:2010-08-16 10:03:56

标签: asp.net

你好朋友请验证我的代码 这是将可选参数传递给方法的正确方法。 如果有任何问题,请建议我是否有更好的解决方案。

protected void Ok_Click(object sender, EventArgs e)
    {
        try
        {
            if (Page.IsValid)
            {
                int course_id = Convert.ToInt32(course.SelectedValue);
                int passoutYear = Convert.ToInt32(passout.SelectedValue);
                int currentBacklog = Convert.ToInt32(currrentBacklogDDL.SelectedValue);
                int sex = Convert.ToInt32(gender.SelectedValue);
                int? eGap = null;
                int? firstYrPercent = null;
                int? secondYrPercent = null;
                int? thirdYrPercent = null;
                int? finalYearpercent = null;
                int? currentDegeePercentage = null;
                int? highSchoolPercentge = null;
                int? higherSchoolPercentage = null;
                int? grauationPercentage = null;
                int? diplomaPercentage = null;
                int? noOfAtkt = null;

                string dateOfBirth = DOB.Text.Trim();
                DateTime birthDate = DateTime.ParseExact(dateOfBirth, "dd/mm/yyyy", System.Globalization.CultureInfo.InvariantCulture);
                string outPut = birthDate.ToString("mm/dd/YYYY");
                DateTime date = Convert.ToDateTime(outPut);

                if (!String.IsNullOrEmpty(educationGap.Text))
                {
                    eGap = Convert.ToInt32(educationGap.Text.Trim());
                }
                if (!string.IsNullOrEmpty(firstYear.Text))
                {
                    firstYrPercent = Convert.ToInt32(firstYear.Text.Trim());
                }
                if (!string.IsNullOrEmpty(secondYear.Text))
                {
                    secondYrPercent = Convert.ToInt32(secondYear.Text.Trim());
                }
                if (!string.IsNullOrEmpty(thirdYear.Text))
                {
                    thirdYrPercent = Convert.ToInt32(thirdYear.Text.Trim());
                }
                if (!string.IsNullOrEmpty(finalyear.Text))
                {
                    finalYearpercent = Convert.ToInt32(finalyear.Text.Trim());
                }
                if (!string.IsNullOrEmpty(currentDegree.Text))
                {
                    currentDegeePercentage = Convert.ToInt32(currentDegree);
                }
                if (!string.IsNullOrEmpty(higherSchool.Text.Trim()))
                {
                    higherSchoolPercentage = Convert.ToInt32(higherSchool.Text.Trim());
                }
                if (!string.IsNullOrEmpty(highSchool.Text))
                {
                    highSchoolPercentge = Convert.ToInt32(highSchool.Text.Trim());
                }
                if (!string.IsNullOrEmpty(graduation.Text))
                {
                    grauationPercentage = Convert.ToInt32(graduation.Text.Trim());
                }
                if (!string.IsNullOrEmpty(diploma.Text))
                {
                    diplomaPercentage = Convert.ToInt32(diploma.Text.Trim());
                }
                if (!string.IsNullOrEmpty(atkt.Text))
                {
                    noOfAtkt = Convert.ToInt32(atkt.Text.Trim());
                }

                Dictionary<string, object> paramList = new Dictionary<string, object>();
                paramList.Add("@courseId", course_id);
                paramList.Add("@passoutYear", passoutYear);
                paramList.Add("@currentBacklog", currentBacklog);
                paramList.Add("@sex", sex);
                paramList.Add("@eGap", eGap);
                paramList.Add("@firstYrPercent", firstYrPercent);
                paramList.Add("@secondYrPercent", secondYrPercent);
                paramList.Add("@thirdYrPercent", thirdYrPercent);
                paramList.Add("@finalYearpercent", finalYearpercent);
                paramList.Add("@currentDegeePercentage", currentDegeePercentage);
                paramList.Add("@highSchoolPercentge", highSchoolPercentge);
                paramList.Add("@higherSchoolPercentage", higherSchoolPercentage);
                paramList.Add("@grauationPercentage", grauationPercentage);
                paramList.Add("@diplomaPercentage", diplomaPercentage);
                paramList.Add("@noOfAtkt", noOfAtkt);

                StringBuilder branchId= new StringBuilder();
                foreach (ListItem li in branch.Items)
                {
                    if (li.Selected)
                    {
                        branchId.Append(Convert.ToInt32(li.Value));
                    }
                }
                DataTable dt = searchManager.GetEligibleStudent(paramList, branchId);



            }

        }
        catch (Exception ex) 
        {
            COMMON.logger.Error("Error On Button click Ok", ex);
        }
    }

4 个答案:

答案 0 :(得分:1)

首先将值转换为正确的值,然后将其放入对象列表中,以便在GetEligibleStudent中,您必须再次转换这些值,这有点令人遗憾。

我的猜测是为此创建一个类,例如,HigherSchoolPercentage成为一个字段。由于您将获得学生记录,甚至可能是您可以重复使用此结构。

HTH, NIC

<强>更新

创建一个类似

的类
class StudentQuery
{
    public int course_id;
    ...
    public int? egap = null;
    ...   

}

然后,在你的页面中,说

StudentQuery sq = new StudentQuery();

if (!String.IsNullOrEmpty(educationGap.Text))
{
    sq.eGap = Convert.ToInt32(educationGap.Text.Trim());
}

然后你可以说

DataTable dt = searchManager.GetEligibleStudent(sq, branchId);

像这样,

  • 您保留变量的类型
  • 您不必创建此paramList
  • 问题结构(您获得的字段)和数据(字段具有的值)之间的分离更清晰。

更新2

由于这些字段所需的唯一格式实际上是这里构建的键/值列表,要传递给SQL命令,我认为代码示例是可以的。人们可能仍然会考虑将代码重构为一个单独的方法,但我之前创建类的建议实际上是多余的。

答案 1 :(得分:0)

你应该在循环中做所有验证和转换。

答案 2 :(得分:0)

我觉得如果你写的普通数据bean有吸气剂和固定器那么会比这更好....

答案 3 :(得分:0)

如果您打算在其他地方使用该搜索方法,则应使用 struct 作为参数。这样您就可以在方法中保持类型安全。

目前,您必须编写额外的代码来测试字典中每个键传递的类型。如果你有一个类,你不必这样做,因为成员都有类型。

这真的是编程风格。一些开发人员喜欢保持类型安全,除非他们绝对不能再这样做了。其他人喜欢让编译器脱离他们的业务。 C#作为一种语言试图吸引两个群体。最初它是一种严格的静态类型语言,但现在我们有动态/鸭子打字。