0

私はDDLをasp.net Webフォームに入力しており、ストアドプロシージャを呼び出すすべてのSQLクラスに対して持っているsqlutililityクラスを使用しています。

しかし、各ドロップダウンリストで同じコードを繰り返し、名前を変更してから、使用したいときに呼び出します。

私が知りたいのは。常に繰り返す代わりに、このコードを使用する方法はありますか?

    protected void Populate_Authority()
    {
    //  Init()
    //  ------
    SqlConnection conn = null;
    SqlDataReader rdr = null;
    SqlCommand cmd = null;
    //  
    drp_Authority.Items.Clear();

    try
    {
        //  Conn
        //  ----
        conn = new      SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        conn.Open();

        //  Cmd
        //  ---
        cmd = new SqlCommand("[sp_Populate_Authority]", conn);
        cmd.CommandType = CommandType.StoredProcedure;


        //  Execute
        //  -------
        rdr = cmd.ExecuteReader();

        //  Row(s)?
        //  -------
        if (rdr.HasRows)
        {
            //  Read
            //  ----
            while (rdr.Read())
            {
                //  Populate
                //  --------
                drp_Authority.Items.Add(
                    new ListItem(
                        rdr["Authority"].ToString(),
                        rdr["AuthorityID"].ToString()));
            }

            //  Blank
            //  -----
            drp_Authority.Items.Insert(0, String.Empty);
        }

        //  Clean up / Close down
        //  ---------------------
        cmd.Dispose();
        rdr.Dispose();
        rdr.Close();
        conn.Dispose();
        conn.Close();

    }
    catch (SqlException ex)
    {
        //  Throw Sql Exception 
        //  -------------------
        throw ex;
    }
    finally
    {
        //  Clean up / Close down
        //  ---------------------
        if (cmd != null)
        {
            cmd.Dispose();
        }
        if ((rdr != null) && (!rdr.IsClosed))
        {
            rdr.Dispose();
            rdr.Close();
        }
        if ((conn != null) && (conn.State != ConnectionState.Closed))
        {
            conn.Dispose();
            conn.Close();
        }
    }
}
4

2 に答える 2

0

コードを取得し、ヘルパーメソッドでラップします。

protected void Populate_Ddl(DropDownList ddl, string command, string valueName, string keyName)
    {
    //  Init()
    //  ------
    SqlConnection conn = null;
    SqlDataReader rdr = null;
    SqlCommand cmd = null;
    //  
    ddl.Items.Clear();

    try
    {
        //  Conn
        //  ----
        conn = new      SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        conn.Open();

        //  Cmd
        //  ---
        cmd = new SqlCommand(command, conn);
        cmd.CommandType = CommandType.StoredProcedure;


        //  Execute
        //  -------
        rdr = cmd.ExecuteReader();

        //  Row(s)?
        //  -------
        if (rdr.HasRows)
        {
            //  Read
            //  ----
            while (rdr.Read())
            {
                //  Populate
                //  --------
                ddl.Items.Add(
                    new ListItem(
                        rdr[keyName].ToString(),
                        rdr[valueName].ToString()));
            }

            //  Blank
            //  -----
            ddl.Items.Insert(0, String.Empty);
        }

        //  Clean up / Close down
        //  ---------------------
        cmd.Dispose();
        rdr.Dispose();
        rdr.Close();
        conn.Dispose();
        conn.Close();

    }
    catch (SqlException ex)
    {
        //  Throw Sql Exception 
        //  -------------------
        throw ex;
    }
    finally
    {
        //  Clean up / Close down
        //  ---------------------
        if (cmd != null)
        {
            cmd.Dispose();
        }
        if ((rdr != null) && (!rdr.IsClosed))
        {
            rdr.Dispose();
            rdr.Close();
        }
        if ((conn != null) && (conn.State != ConnectionState.Closed))
        {
            conn.Dispose();
            conn.Close();
        }
    }
}

次に、コードから呼び出します。

Populate_Ddl(drp_Authority, "[sp_Populate_Authority]", "Authority", "AuthorityID");

そして、すべてのddlに対して繰り返します。

于 2012-12-04T09:16:54.387 に答える
0

以下に示すように、ドロップダウンリストを埋めるための汎用関数を作成します。

protected void Populate_DropDownList(DropDownList ddl, string storedProceduceName, string dropdownTextField, string dropdownValueField)
{
//Modify your code accordingly
}
于 2012-12-04T09:19:07.300 に答える