1
私はC#開発に新しく、単純なアプリケーションを作成しようとしているときに問題が発生しました。最初のComboBoxのSelectedIndexChangedプロパティに基づいてComboBoxを作成しようとしています。 Visual Studioは、2番目のcn.Open(プライベート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;
}
}
}
各メソッドで新しい接続を宣言し、usingステートメントでラップするコードを変更する必要があります。その後、自動的に閉じて処分されます。 – cadrell0
'SelectedIndexChanged'からopenコマンドを削除すると、何も撮られませんか?データベース接続が開いているように見えますか? –
ConnectionPoolの作業を複製しようとしています。ですから@ cadrell0のアドバイスに従ってください:接続を各メソッドにローカルにしておきます。 –