比较功能并选择相同项目的复选框列表中的项目

时间:2013-11-04 13:36:51

标签: sql-server-2008 c#-4.0

我有两个函数,其中包含返回发货区域的查询。一个返回飞行员认证区域,另一个返回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;
    }

1 个答案:

答案 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;
}