gpt4 book ai didi

c# - 在 Windows Mobile 5 上将数据加载到 Sql CE 数据库的最快方法

转载 作者:行者123 更新时间:2023-11-30 18:05:51 25 4
gpt4 key购买 nike

我正在 Windows Mobile 5 上开发一个应用程序,其中应用程序的一部分从 IEnumerable 加载数据负载 (2000+)。

目前我正在检查数据库中是否存在 Id,并根据结果执行 Insert 或 Update 语句(使用 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);
}
}
}
}
}

最佳答案

如果您只访问一个表,使用 TableDirect 而不是查询处理器可能会使性能提高 10 倍。仅在 ID 索引上查找,如果该行存在,则更新,否则插入。使用 SqlCeResultSet 进行遍历。

关于c# - 在 Windows Mobile 5 上将数据加载到 Sql CE 数据库的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com