你好朋友请验证我的代码 这是将可选参数传递给方法的正确方法。 如果有任何问题,请建议我是否有更好的解决方案。
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);
}
}
答案 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);
像这样,
更新2
由于这些字段所需的唯一格式实际上是这里构建的键/值列表,要传递给SQL命令,我认为代码示例是可以的。人们可能仍然会考虑将代码重构为一个单独的方法,但我之前创建类的建议实际上是多余的。
答案 1 :(得分:0)
你应该在循环中做所有验证和转换。
答案 2 :(得分:0)
我觉得如果你写的普通数据bean有吸气剂和固定器那么会比这更好....
答案 3 :(得分:0)
如果您打算在其他地方使用该搜索方法,则应使用 struct 或类作为参数。这样您就可以在方法中保持类型安全。
目前,您必须编写额外的代码来测试字典中每个键传递的类型。如果你有一个类,你不必这样做,因为成员都有类型。
这真的是编程风格。一些开发人员喜欢保持类型安全,除非他们绝对不能再这样做了。其他人喜欢让编译器脱离他们的业务。 C#作为一种语言试图吸引两个群体。最初它是一种严格的静态类型语言,但现在我们有动态/鸭子打字。