C# 是否需要清理SQL CE ExecuteSultset?
我有一张大约有150行的桌子。以下是表中的数据类型:C# 是否需要清理SQL CE ExecuteSultset?,c#,.net,sql-server-ce,C#,.net,Sql Server Ce,我有一张大约有150行的桌子。以下是表中的数据类型: int(PK) nvarchar(52) 锡 日期时间 唯一标识符 nvarchar(300) 钻头 钻头 钻头 钻头 我从web服务下载数据并插入数据库。当我这样做的时候,效果很好 我稍后在执行程序时再次调用web服务。因为我可能已经更新了我第一次下载的一些数据,所以我检查数据库以查看行是否已更改。如果有,我就离开,如果没有,我就更新。我认为这是检查,看看是否有它是造成我的问题。当我这样做时,会出现以下错误: “SQL Server C
- int(PK)
- nvarchar(52)
- 锡
- 日期时间
- 唯一标识符
- nvarchar(300)
- 钻头
- 钻头
- 钻头
- 钻头
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内容的完整代码,我把整个类都放在这里。)您是否在某处处理您的命令
任何实现IDisposable(具有Dispose()方法)的内容都应该被释放。这是一般规则。由于您要为每一行调用此方法,因此应该处理您的命令。当您将返回的行数限制为5左右时会发生什么情况。根据我在谷歌上的发现,结果集大于缓冲区。增加缓冲区将允许更大的结果集。就您的代码而言,不应该存在会影响缓冲区的“清理”。这很奇怪,我将行数限制为1。
whereValue
将其限制为仅一行。当我单步执行代码时,它每次只返回一行…您使用TableDirect的原因是什么?您是否尝试过只获取数据,然后填充数据表或数据集?你在某处指挥吗?我有一种强烈的感觉,如果使用CommandType文本,发出查询,然后使用ExecuteReader,这个问题就会消失。您可以使用DbAdapter来填充DataTable/DataSet。@Shiv Kumar-我的数据访问速度非常慢,所以我将其全部改为TableDirect,速度快得多。我不会在任何地方执行命令。我需要这样做吗?@Vaccano,任何实现IDisposable(具有Dispose()方法)的东西都应该被丢弃。这是一般规则。因为您要为每一行调用此方法,所以应该处理您的命令。你能把问题的第三段重新写清楚吗?。主键是否用于确定是否需要更新记录?这只是更新,还是在第一次之后有插入和删除?再次感谢!原来我身边有很多“一次性”物品。我解决了他们,解决了几个问题。