我创建了一个数据库文件,该文件每分钟更新一次读数并存储在SQL Server CE数据库文件中。但是,随着数据库变得非常大,它开始变得非常慢。SQL Server CE&C#删除记录后无法读取表中的数据
我决定在数据库达到一定大小后删除最早的文件,因为它们对我来说没用。我成功地做到这一点使用下面的命令:
command.Append("DELETE FROM MyTable WHERE ID IN (SELECT TOP(" + difference.ToString() + ") ID From MyTable)");
其中difference.ToString()
是我用来计算我是多么想删除值。
这工作成功,因为我可以使用CompactView
打开文件,我也可以键入CompactView
中的命令以获得相同的结果。
现在我的问题开始时,我试图读取数据并将其更新到图形上。所以,我的另一种形式的代码执行以下操作:
private void updateGraphTimer_Tick(object sender, EventArgs e)
{
using (SqlCeConnection connection = new SqlCeConnection(connectionString))
{
connection.Open();
using (SqlCeDataAdapter adapter = new SqlCeDataAdapter("SELECT * FROM MyTable", connection))
{
// some code that is not relevant between these two statements
using (DataTable table = new DataTable())
{
StringBuilder command = new StringBuilder();
command.Clear();
command.Append("SELECT TOP(1) ID FROM MyTable ORDER BY ID DESC");
using (SqlCeCommand com = new SqlCeCommand(command.ToString(), connection))
{
int value = (int)com.ExecuteScalar();
graphPage.latestID = value;
if (value > graphPage.startID)
{
DataColumn xDateColumn;
xDateColumn = new DataColumn("XDate");
xDateColumn.DataType = typeof(double);
table.Columns.Add(xDateColumn);
adapter.Fill(graphPage.startID, value, table);
我的问题是,该表是空的,即使从(int)com.ExecuteScalar()
值返回一个值!如果我没有执行删除,它一切正常!
我无法弄清楚发生了什么!我能想到的唯一事情就是阅读和编写sql文件。
非常感谢!
你说你运行删除表时显示空了吗? – Moudiz
如何以及何时运行删除?它是一个批处理手动过程,还是由另一个线程自动运行?看起来可能存在同步问题 – salvolds
在单独的窗体上有两个定时器,一个定时器用于使用最新数据填充数据库并且它一直运行。另一个定时器在图形程序启动时使用。他们每分钟更新数据或更快。当数据库变大时,最早的数据被删除。同时,图形程序试图通过读取相同的数据库来更新读数来显示。尽管获得最新的ID字段能够正常工作并给出正确的读数,但是当我填写表格时,它什么也没有显示。干杯 – aaz