0

配送エリアを返すクエリを持つ 2 つの関数があります。1 つはパイロット認定エリアを返し、もう 1 つはポイント 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;
    }
4

1 に答える 1

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;
}
于 2013-11-04T16:11:49.440 に答える