“连接已经打开(状态=开)”
问题描述:
我是新的C#开发,并尝试创建一个简单的应用程序,我遇到了一个问题。我想基于第一个ComboBox的SelectedIndexChanged属性填充一个ComboBox。 Visual Studio在第二个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;
}
}
}
答
你应该改变你的代码以声明每个方法一个新的连接,并在using语句包裹。然后它会自动关闭并处理。
你应该改变你的代码以声明每个方法一个新的连接,并在using语句包裹。然后它会自动关闭并处理。 – cadrell0 2012-04-27 19:25:22
如果您从“SelectedIndexChanged”中删除打开的命令,它将不会拍摄任何内容?或者数据库连接看起来像是打开的? – 2012-04-27 19:26:02
您正在尝试复制ConnectionPool的工作。所以遵循@ cadrell0的建议:保持每个方法的本地连接。 – 2012-04-27 19:36:15