Обновление / вставка в таблицу с использованием SQLCeResultSet
У меня есть база данных SQL Compact Edition, которую я периодически обновляю (через веб-сервисы).
Часть, где я пишу в базу данных, занимает слишком много времени. В настоящее время я делаю это с Linq to Datasets (как видно из этого вопроса). Я слышал, что если я сделаю это с SQLCeResultSet, это будет работать быстрее.
Итак, учитывая, что у меня есть такая таблица:
tblClient + - CLIENT_ID {Уникальный идентификатор} (первичный ключ) +- CLIENT_NAME {varchar (100)} +- CLIENT_ACTIVE {бит}
И у меня есть объект, который я получаю от своих веб-сервисов, которые выглядят так:
class Client
{
public Guid ClientID { get; set; }
public String ClientName { get; set; }
public bool Active { get; set; }
}
Как я могу получить 100 клиентских объектов в базу данных?
Обновление существующих строк и вставка строк, которых еще нет в базе данных (определяется первичным ключом)?
Любой пример кода был бы великолепен. у меня есть SqlCeConnection
, но ничего больше.
Спасибо за любую помощь!
1 ответ
Это будет выглядеть примерно так:
(Отредактировано для вставки или обновления)
void Foo(SqlCeConnection connection)
{
using (var cmd = new SqlCeCommand())
{
cmd.CommandType = CommandType.TableDirect;
cmd.CommandText = "MyTableName";
cmd.Connection = connection;
cmd.IndexName = "PrimakryKeyIndexName";
using (var result = cmd.ExecuteResultSet(
ResultSetOptions.Scrollable | ResultSetOptions.Updatable))
{
int pkValue = 100; // set this, obviously
if (result.Seek(DbSeekOptions.FirstEqual, pkValue))
{
// row exists, need to update
result.Read();
// set values
result.SetInt32(0, 1);
// etc.
result.Update();
}
else
{
// row doesn't exist, insert
var record = result.CreateRecord();
// set values
record.SetInt32(0, 1);
// etc.
result.Insert(record);
}
}
}
}