С помощью SQLCE вы можете открыть соединение при запуске программы и утилизировать его при закрытии программы.Это соединение может обслуживать несколько запросов без проблем.Способ SqlCeResultset задан, чтобы смотреть прямо в таблицу базы данных и не загружать какие-либо данные в память.Следовательно, когда вы закрываете свою связь, вам некуда смотреть, и поэтому он жалуется.И именно поэтому решение Brano работает, поскольку данные загружаются в память с использованием таблицы данных. В вашем случае просто откройте соединение при загрузке формы и закройте его при закрытии формы.Вам не нужно много загружать память, и я бы не советовал оба решения, представленные здесь (зачем загружать sth в память, когда он быстрее обращается к ней напрямую?).Просто.
public partial class Form1 : Form
{
private SqlCeConnection _conn;
public Form1()
{
InitializeComponent();
_conn = new SqlCeConnection(@"Data Source = |DataDirectory|\Database1.sdf");
this.dataGridView1.AutoGenerateColumns = true;
}
private void Form1_Load(object sender, EventArgs e)
{
SqlCeCommand sqlcmd = new SqlCeCommand();
sqlcmd.Connection = _conn;
sqlcmd.CommandText = "SELECT ID, UserName FROM Table1";
_conn.Open();
SqlCeResultSet rs = sqlcmd.ExecuteResultSet(ResultSetOptions.Scrollable);
this.bindingSource1.DataSource = rs;
//dont close the connection
// _conn.Close();
}
protected override Close()
{
if (_conn != null)
_conn.close();
base.Close()
}
}