我有两个函数,其中包含返回发货区域的查询。一个返回飞行员认证区域,另一个返回A点和B点之间的区域。我想比较它们并选择匹配区域的复选框。这就是我所拥有的。
private void getAreaText(string PilotID)
{
SqlConnection sqlCN;
SqlCommand sqlCOM;
SqlDataReader sqlDR;
DateTime dato;
string strCOM = ConfigurationManager.AppSettings["database"];
sqlCN = new SqlConnection(strCOM);
try
{
sqlCN.Open();
sqlCOM = new SqlCommand("select f_AreaText, f_DateOfIssue from v_GetAreaText where f_PilotID='" + PilotID + "'", sqlCN);
sqlDR = sqlCOM.ExecuteReader();
CheckBoxList1.Items.Clear();
while (sqlDR.Read())
{
dato = sqlDR.GetDateTime(1);
dato = dato.AddYears(1);
if (DateTime.Now < dato)
CheckBoxList1.Items.Add(sqlDR.GetString(0));
if (CheckBoxList1.Items.Contains(findAreas(Session["PilotID"].ToString)))
{
CheckBoxList1.Items[i].Selected = true;
}
}
sqlDR.Close();
}
catch (DataException ex)
{
Response.Write(ex.ToString());
}
finally
{
sqlCN.Close();
sqlDR = null;
sqlCOM = null;
sqlCN = null;
}
return;
}
protected void findAreas(string PilotID)
{
SqlConnection sqlCN;
SqlCommand sqlCOM;
SqlDataReader sqlDR;
string strCOM = ConfigurationManager.AppSettings["database"];
sqlCN = new SqlConnection(strCOM);
try
{
sqlCN.Open();
sqlCOM = new SqlCommand("select DISTINCT f_AreaText from v_FindAreas where f_PilotID='" + PilotID + "'and f_SailedFrom='" + getLMFromList(FromList) + "'and f_SailedTo='" + getLMFromList(ToList) + "'", sqlCN);
sqlDR = sqlCOM.ExecuteReader();
CheckBoxList1.Items.Clear();
while (sqlDR.Read())
{
CheckBoxList1.Items.Add(sqlDR.GetString(0));
}
sqlDR.Close();
}
catch (DataException ex)
{
Response.Write(ex.ToString());
}
finally
{
sqlCN.Close();
sqlDR = null;
sqlCOM = null;
sqlCN = null;
}
return;
}
答案 0 :(得分:0)
您的代码非常令人困惑,所以这里尝试组织它并使其同时工作。你可以做很多事情来改进它,但由于我在黑暗中编码,我没有太多改变它。我改变的主要是使用SQL参数而不是将值连接到文字命令。
private void getAreaText(string PilotID)
{
var strCOM = ConfigurationManager.AppSettings["database"];
var sqlCN = new SqlConnection(strCOM);
try
{
sqlCN.Open();
var sqlCOM = new SqlCommand("select f_AreaText, f_DateOfIssue from v_GetAreaText where f_PilotID=@p1", sqlCN);
sqlCOM.Parameters.AddWithValue("@p1", PilotID);
var sqlDR = sqlCOM.ExecuteReader();
CheckBoxList1.Items.Clear();
while (sqlDR.Read())
{
var dato = sqlDR.GetDateTime(1);
dato = dato.AddYears(1);
if (DateTime.Now < dato)
{
var AreaText = sqlDR.GetString(0);
CheckBoxList1.Items.Add(AreaText);
if (findAreas(PilotID, AreaText))
// Do you want Selected here or Checked ?
CheckBoxList1.Items[CheckBoxList1.Count-1].Selected = true;
}
}
}
catch (DataException ex)
{
Response.Write(ex.ToString());
}
finally
{
sqlDR.Close();
sqlCN.Close();
sqlDR = null;
sqlCOM = null;
sqlCN = null;
}
return;
}
protected bool findAreas(string PilotID, string AreaText)
{
var strCOM = ConfigurationManager.AppSettings["database"];
var sqlCN = new SqlConnection(strCOM);
try
{
sqlCN.Open();
sqlCOM = new SqlCommand("select DISTINCT f_AreaText from v_FindAreas where f_PilotID=@p1 and f_SailedFrom=@p2 and f_SailedTo=@p3 and f_AreaText=@p4", sqlCN);
sqlCOM.Parameters.AddWithValue("@p1", PilotID);
sqlCOM.Parameters.AddWithValue("@p2", getLMFromList(FromList));
sqlCOM.Parameters.AddWithValue("@p3", getLMFromList(ToList));
sqlCOM.Parameters.AddWithValue("@p4", AreaText);
var sqlDR = sqlCOM.ExecuteReader();
if (sqlDR.HasRows)
return true;
}
catch (DataException ex)
{
Response.Write(ex.ToString());
}
finally
{
sqlDR.Close();
sqlCN.Close();
sqlDR = null;
sqlCOM = null;
sqlCN = null;
}
return false;
}