0

私はまだASP.Net C#に非常に慣れていません。このコードは正常に動作します。web.config ファイルに複数の接続文字列があり、ドロップダウン リストのテキストに基づいてそれらを切り替えます。以下にあるもの(ある場合)ではなく、これをアーカイブするためのよりきちんとした/よりクリーンな方法のアドバイスを期待していました。ありがとう!

 protected void search_ClickALL(object sender, EventArgs e)
{

    if (ddlALL.SelectedItem.Text == "ENWL")
    {
        using (
       SqlConnection conn =
           new SqlConnection(ConfigurationManager.ConnectionStrings["ConHprENWL"].ConnectionString))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT dpCreatedDT, enStatusCH, enNotificationNoNI FROM dp_enquiry WHERE ennotificationnoni = @JobnoALL", conn);
            try
            {
                SqlParameter search = new SqlParameter();
                search.ParameterName = "@JobnoALL";
                search.Value = JobnoALL.Text.Trim();
                cmd.Parameters.Add(search);
                SqlDataReader dr = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);
                gridviewALL.DataSource = dt;
                gridviewALL.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                if (cmd.ExecuteScalar() == null)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "scriptkey", "<script>alert('Job Number not found!');</script>");
                }
                conn.Close();
                mpePopUpALL.Show();
            }
        }
    }

    else if (ddlALL.SelectedItem.Text == "NW")
    {
        using (
       SqlConnection conn =
           new SqlConnection(ConfigurationManager.ConnectionStrings["ConHprNorthumbrian"].ConnectionString))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT dpCreatedDT, enStatusCH, enNotificationNoNI FROM dp_enquiry WHERE ennotificationnoni = @JobnoALL", conn);
            try
            {
                SqlParameter search = new SqlParameter();
                search.ParameterName = "@JobnoALL";
                search.Value = JobnoALL.Text.Trim();
                cmd.Parameters.Add(search);
                SqlDataReader dr = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);
                gridviewALL.DataSource = dt;
                gridviewALL.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                if (cmd.ExecuteScalar() == null)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "scriptkey", "<script>alert('Job Number not found!');</script>");
                }
                conn.Close();
                mpePopUpALL.Show();
            }
        }
    }


    }
4

4 に答える 4

4

別の関数を作成し、その中にすべてのビジネス ロジックを記述し、ドロップ ダウン項目に基づいて接続文字列をパラメーターとして取得します。

protected void search_ClickALL(object sender, EventArgs e)
{
    if (ddlALL.SelectedItem.Text == "ENWL")
    {
        ShowData(ConfigurationManager.ConnectionStrings["ConHprENWL"].ConnectionString.ToString());
    }
    else if (ddlALL.SelectedItem.Text == "NW")
    {
        ShowData(ConfigurationManager.ConnectionStrings["ConHprNorthumbrian"].ConnectionString).ToString());
    }
}

private void ShowData(string connectionstring)
{
    using (
       SqlConnection conn =
           new SqlConnection(connectionstring))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT dpCreatedDT, enStatusCH, enNotificationNoNI FROM dp_enquiry WHERE ennotificationnoni = @JobnoALL", conn);
            try
            {
                SqlParameter search = new SqlParameter();
                search.ParameterName = "@JobnoALL";
                search.Value = JobnoALL.Text.Trim();
                cmd.Parameters.Add(search);
                SqlDataReader dr = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);
                gridviewALL.DataSource = dt;
                gridviewALL.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                if (cmd.ExecuteScalar() == null)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "scriptkey", "<script>alert('Job Number not found!');</script>");
                }
                conn.Close();
                mpePopUpALL.Show();
            }
       }
}
于 2015-10-27T09:55:44.530 に答える
1

同じコードを複数回書いている場合は、Switchケースで一度に作成できます。

     string ConnectionString;
        switch (comboBox1.SelectedIndex)
        {
            case 0:
                ConnectionString = ConfigurationManager.ConnectionStrings["ConHprENWL"].ConnectionString
                break;
            case 1:
                ConnectionString = ConfigurationManager.ConnectionStrings["XYZ"].ConnectionString
                break;

        }
        SqlConnection Con = new SqlConnection(ConnectionString);
        Con.Open();  
/*YOUR CODE */
于 2015-10-27T09:51:15.317 に答える
0

次の操作を 2 回実行しています。

       conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT dpCreatedDT, enStatusCH, enNotificationNoNI FROM dp_enquiry WHERE ennotificationnoni = @JobnoALL", conn);

 try
        {
            SqlParameter search = new SqlParameter();
            search.ParameterName = "@JobnoALL";
            search.Value = JobnoALL.Text.Trim();
            cmd.Parameters.Add(search);
            SqlDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(dr);
            gridviewALL.DataSource = dt;
            gridviewALL.DataBind();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        {
            if (cmd.ExecuteScalar() == null)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "scriptkey", "<script>alert('Job Number not found!');</script>");
            }
            conn.Close();
            mpePopUpALL.Show();
        }

代わりに、関数として作成し、SQLConnection conn を引数として関数に渡します。

また、using ステートメントを使用している場合は、conn を閉じる必要はありません。

于 2015-10-27T09:51:04.497 に答える
0

if を使用して接続文字列を選択するだけで、残りは同じように見えるからです。

protected void search_ClickALL(object sender, EventArgs e)
{
 using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[ddlALL.SelectedItem.Text].ConnectionString))
 {
     conn.Open();
     SqlCommand cmd = new SqlCommand("SELECT dpCreatedDT, enStatusCH, enNotificationNoNI FROM dp_enquiry WHERE ennotificationnoni = @JobnoALL", conn);
     try
     {
         SqlParameter search = new SqlParameter();
         search.ParameterName = "@JobnoALL";
         search.Value = JobnoALL.Text.Trim();
         cmd.Parameters.Add(search);
         SqlDataReader dr = cmd.ExecuteReader();
         DataTable dt = new DataTable();
         dt.Load(dr);
         gridviewALL.DataSource = dt;
         gridviewALL.DataBind();
     }
     catch (Exception ex)
     {
         Response.Write(ex.Message);
     }
     finally
     {
         if (cmd.ExecuteScalar() == null)
         {
             Page.ClientScript.RegisterStartupScript(this.GetType(), "scriptkey", "<script>alert('Job Number not found!');</script>");
         }
         conn.Close();
         mpePopUpALL.Show();
     }
  }

}
于 2015-10-27T09:54:05.307 に答える