是否需要清除SQL CE ExecuteResultSet?

时间:2011-02-22 22:16:16

标签: c# .net sql-server-ce

我有一张约150行的表格。这些是表中的数据类型:

  • int(PK)
  • 为nvarchar(52)
  • TINYINT
  • 日期时间
  • 唯一标识符
  • 为nvarchar(300)

我从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。)

1 个答案:

答案 0 :(得分:3)

你在某个地方处理你的命令吗?

应该处理任何实现IDisposable(具有Dispose()方法)的东西。这是一般规则。由于您要为每一行调用此方法,因此应该处理命令。

相关问题