我有一张约150行的表格。这些是表中的数据类型:
我从Web服务下载数据并插入数据库。当我这样做时它工作正常。
我稍后在执行程序时再次调用Web服务。由于我可能已经更新了我第一次下载的一些数据,因此检查数据库以查看行已更改。如果它有,那么我离开它,如果没有,那么我更新它。我认为这是检查它是否存在导致我的问题。当我这样做时,我收到此错误:
“SQL Server Compact已超出缓冲区大小。通过修改ssce:max buffer size属性,可以在初始化时增加默认大小。[默认大小= 655360]”
注意:这不会在第二次发生时立即发生。 (这意味着我走了一些行,他们更新得很好。)
我唯一能想到的是我的结果集没有被清除掉。 (虽然我使用相同的代码来访问数据库没有任何问题。)
这是我的代码:
public static SqlCeResultSet SetupTable(string tableName, string indexName,
bool allowUpdates, params object[] whereValues)
{
// The command used to affect the data
var command = new SqlCeCommand
{
CommandType = CommandType.TableDirect,
Connection = _connection,
// Set the table that we are going to be working with.
CommandText = tableName,
// Indicate what index we are going to be using.
IndexName = indexName
};
if ((whereValues != null) && (whereValues.Length > 0))
command.SetRange(DbRangeOptions.Match, whereValues, null);
// Get the table ready to work with.
if (allowUpdates)
return command.ExecuteResultSet(
ResultSetOptions.Updatable | ResultSetOptions.Scrollable);
else
return command.ExecuteResultSet(ResultSetOptions.Scrollable);
}
电话看起来像这样:
SetupTable("tblMyTable", "IndexName", true, whereValue);
奇怪的是,如果我不使用SetRange,一切正常。在我看来,如果我使用SetRange它应该使用更少的缓冲区空间(不像它似乎做的那样)。
在此错误崩溃后,查询分析器中的调用也会给出相同的消息。我可以提高缓冲区大小,但我确信它只需要更长的时间来填充(特别是因为我传入的“where”值将范围设置为单行)。
有一点需要注意的是,我为表中的每一行调用上面的代码。 (这就是为什么我要问我是否应该清理我的结果。)虽然我确实在表中的每一行都调用它,但是在我创建一个新行之前,前一行已超出范围。
任何帮助都会很棒!
(注意:如果您想查看SetupTable内容的完整代码,我会将整个班级here。)
答案 0 :(得分:3)
你在某个地方处理你的命令吗?
应该处理任何实现IDisposable(具有Dispose()方法)的东西。这是一般规则。由于您要为每一行调用此方法,因此应该处理命令。