1

私はC#開発に不慣れで、単純なアプリケーションを作成しようとしたときに問題が発生しました。最初のComboBoxのSelectedIndexChangedプロパティに基づいてComboBoxにデータを入力しようとしています。Visual Studioは、2番目のcn.Open(private void cboCities_SelectedIndexChanged内)で、接続が既に開いていると述べています。しかし、私のコードから、私はすでにそれを閉じたと思いますか?私が間違っているのは何ですか?ありとあらゆる助けをいただければ幸いです。ありがとう!

public partial class Form1 : Form
{
    private SqlCeConnection cn = new SqlCeConnection(@"Data Source = \Program Files\ParkSurvey\ParkSurvey.sdf; Persist Security Info = False; Password = *");

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        cn.Open();
        SqlCeCommand command = cn.CreateCommand();
        command.CommandText = "SELECT Name FROM Cities ORDER BY Name ASC";
        SqlCeDataAdapter da = new SqlCeDataAdapter(command);
        DataSet ds = new DataSet();
        da.Fill(ds);
        cn.Close();
        cboCities.ValueMember = "CityId";
        cboCities.DisplayMember = "Name";
        cboCities.DataSource = ds.Tables[0];
        cboCities.SelectedIndex = -1;

    }

    private void cboCities_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboCities.SelectedIndex > -1)
        {
            cn.Open();
            string Cities = cboCities.SelectedValue.ToString();
            SqlCeCommand command = cn.CreateCommand();
            command.CommandText = "SELECT Name FROM Parks WHERE CityId ='" + Cities + "'";
            SqlCeDataAdapter da = new SqlCeDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (cn.State == ConnectionState.Open)
            cn.Close();
            cboParks.ValueMember = "ParkId";
            cboParks.DisplayMember = "Name";
            cboParks.DataSource = ds.Tables[0];
            cboParks.SelectedIndex = -1;

        }
    }

}
4

1 に答える 1

2

各メソッドで新しい接続を宣言するようにコードを変更し、usingステートメントでラップする必要があります。その後、自動的に閉じて破棄します。

于 2012-04-27T19:41:24.097 に答える