0

City、State、および PinCode のデータを入力するコンボボックスがあります。これらのコンボボックスはドップダウン リストであり、ユーザーはそれを選択します。

フォームが開くとロードされます。

コードは次のとおりです。

            /// CODE TO BRING A DATA FROM SQL INTO THE FORM DROP LIST

            /// To fill the sates from States Table

            cn = new SqlConnection(@"Data Source=Nick-PC\SQLEXPRESS;Initial Catalog=AutoDB;Integrated Security=True");
            cmd= new SqlCommand("select * from TblState",cn);
            cn.Open();
            SqlDataReader dr;

            try
            {
                dr = cmd.ExecuteReader();
                while (dr.Read())

                {
                    SelectState.Items.Add(dr["State"].ToString());
                }

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            finally
            {
                cn.Close();
            }

            //To fill the Cities from City Table

            cn1 = new SqlConnection(@"Data Source=Nick-PC\SQLEXPRESS;Initial Catalog=AutoDB;Integrated Security=True");
            cmd1 = new SqlCommand("SELECT * FROM TblCity", cn);
            cn.Open();
            SqlDataReader ds;

            try
            {
                ds = cmd1.ExecuteReader();
                while (ds.Read())
                {
                    SelectCity.Items.Add(ds["City"].ToString());
                }

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            finally
            {
                cn1.Close();
            }

            // To fill the Data in the Pincode from the City Table
            cn2 = new SqlConnection(@"Data Source=Nick-PC\SQLEXPRESS;Initial Catalog=AutoDB;Integrated Security=True");
            cmd2 = new SqlCommand("SELECT (Pincode) FROM TblCity ", cn2);
            cn2.Open();
            SqlDataReader dm;

            try
            {
                dm = cmd2.ExecuteReader();
                while (dm.Read())
                {
                    SelectPinCode.Items.Add(dm["Pincode"].ToString());
                }

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            finally
            {
                cn2.Close();
            }

ちょっと大きいです。すべてのコンボボックスで同じ手順を実行していますが、簡単な方法でマージできる方法はありますか。

4

2 に答える 2

1

基本に忠実なアプローチ - コードを 1 つのメソッドにリファクタリングします。

static IEnumerable<string> Load(string tableName, string columnName)
{
    List<string> result = new List<string>();

    try
    {
        using (var cn = new SqlConnection(@"Data Source=Nick-PC\SQLEXPRESS;Initial Catalog=AutoDB;Integrated Security=True"))
        {
            cn.Open();
            using (var cmd = new SqlCommand("SELECT * FROM " + tableName, cn))
            {
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        result.Add(reader[columnName].ToString());
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    return result;
}

大雑把な仮定:

  1. 1 つのテーブル、1 列のみをクエリします。
  2. のヌルをチェックしていませんIDataReader
于 2012-12-18T04:30:24.620 に答える
0
cn = new SqlConnection(@"Data Source=Nick-PC\SQLEXPRESS;InitialCatalog=AutoDB;Integrated  Security=True");
cmd= new SqlCommand("select * from TblState",cn);
cn.Open();
SqlDataReader dr;
try
{
    dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        SelectState.Items.Add(dr["State"].ToString());
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    cn.Close();
}
//To fill the Cities from City Table
// To fill the Data in the Pincode from the City Table
cn2 = new SqlConnection(@"Data Source=Nick-PC\SQLEXPRESS;Initial Catalog=AutoDB;Integrated Security=True");
cmd2 = new SqlCommand("SELECT * FROM TblCity ", cn2);
cn2.Open();
SqlDataReader dm;
try
{
    dm = cmd2.ExecuteReader();
    while (dm.Read())
    {
        SelectPinCode.Items.Add(dm["Pincode"].ToString());
        //since you are using only one City table to get PinCode and City name this would be better.
        SelectCity.Items.Add(ds["City"].ToString());
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    cn2.Close();
}
于 2012-12-18T05:04:16.330 に答える