我在应用程序中编写了一个函数,用于在表的sqlite中向上插入多行。
该表的创建方式为:
CREATE TABLE KeyValueTable ( ObjectName TEXT PRIMARY KEY NOT NULL, ObjectValue BLOB)
函数是:
private bool Set(IEnumerable<(string key, object value, Type type)> collection)
{
try
{
using (var connection = CreateConnection())
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
foreach (var item in collection)
{
var serialized = Newtonsoft.Json.JsonConvert.SerializeObject(item.value, item.type, null);
using (var command = connection.CreateCommand())
{
command.CommandText = @"INSERT OR REPLACE INTO KeyValueTable VALUES (@ObjectName, @ObjectValue)";
command.Parameters.Add(new SQLiteParameter("@ObjectName", item.key));
command.Parameters.Add(new SQLiteParameter("@ObjectValue", serialized));
try
{
command.ExecuteNonQuery();
}
catch (InvalidOperationException)
{
transaction.Rollback();
return false;
}
} // using
} // foreach
transaction.Commit();
return true;
} // using
}
}
catch (SQLiteException)
{
return false;
}
}
不确定这是否是最好的方法,因为我正在为集合中的每个项目创建命令。
是否有更好的更有效的方法来做到这一点?