У меня есть таблица с 150 строками. Эти типы данных в таблице:
- int (PK)
- NVARCHAR (52)
- TINYINT
- Дата и время
- UniqueIdentifier
- NVARCHAR (300)
- бит
- немного
- бит
- бит
Я загружаю данные из веб-сервиса и вставляю в базу данных. Когда я это делаю, все работает нормально.
Я позже при исполнении моей программы снова вызываю веб-сервис. Поскольку я, возможно, обновил некоторые данные, которые я скачал в первый раз, я проверяю базу данных, чтобы увидеть, что строка изменилась. Если это так, я оставляю его, если нет, то я обновляю его. Я думаю, что это проверка, чтобы увидеть, если это там, вызывает у меня проблемы. Когда я делаю это, я получаю эту ошибку:
"SQL Server Compact превысил размер буфера. Размер по умолчанию можно увеличить при инициализации, изменив свойство буфера ssce: max 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 (не больше, чем кажется).
После сбоя с этой ошибкой вызовы в Query Analyzer также выдадут то же сообщение. Я мог бы увеличить размер буфера, но я уверен, что заполнение займет немного больше времени (особенно потому, что я передаю значение «где», которое устанавливает диапазон в одну строку).
Следует отметить, что я вызываю приведенный выше код для каждой строки в моей таблице. (Вот почему я спрашиваю, нужно ли мне убирать свои результаты.) Хотя я вызываю его для каждой строки в моей таблице, предыдущая выходит из области видимости, прежде чем я создаю новую.
Любая помощь будет отличной!
(Примечание: если вы хотите увидеть полный код для файла SetupTable, я поместил весь класс здесь .)