【发布时间】:2011-07-04 22:29:19
【问题描述】:
我正在 Windows Mobile 5 上开发一个应用程序,其中应用程序的一部分从 IEnumerable 加载数据负载 (2000+)。
目前我正在检查 Id 是否存在于数据库中,并根据结果执行插入或更新语句(使用 SqlCeCommand 的 ExecuteNonQuery 方法)。
到目前为止,它的性能还不错,但我想知道是否有更快/更好的方法来做到这一点,这可能会提高性能。
我看过某种批量插入,但据我了解,这仅适用于插入。我的 IEnumerable 中的某些项目很有可能已经存在于数据库中,如果存在则需要更新。所以批量复制/插入不会这样做 - 对吗?
感谢任何答案。
非常感谢,
ETFairfax。
编辑:这是我最终得到的代码。性能提升是惊人的。我已经从需要 30 秒来保存 1000 条记录,到眨眼之间。欢迎提出进一步的改进建议......
public void MergeData(IEnumerable<T> entities)
{
using (var cmd = GlobalConnection.Instance.Connection.CreateCommand())
{
cmd.CommandType = CommandType.TableDirect;
cmd.IndexName = "PK_" + this.TableName;
cmd.CommandText = this.TableName;
using (SqlCeResultSet sqlCeResultSet = cmd.ExecuteResultSet(ResultSetOptions.Updatable))
{
foreach (var entityToSave in entities)
{
bool recordAlreadyExists = sqlCeResultSet.Seek(DbSeekOptions.FirstEqual, entityToSave.Id);
if (recordAlreadyExists)
{
//Do an Update
sqlCeResultSet.Read();
PopulateForUpdate(sqlCeResultSet, entityToSave);
sqlCeResultSet.Update();
}
else
{
//Do an Insert
SqlCeUpdatableRecord insertRecord = sqlCeResultSet.CreateRecord();
PopulateForInsert(insertRecord, entityToSave);
sqlCeResultSet.Insert(insertRecord);
}
}
}
}
}
【问题讨论】:
标签: c# sql windows-mobile sql-server-ce