
What's the best way to insert/update/delete multiple records in a database from an application?给定一小部分实体(例如10个或更少),可以在应用程序中进行插入,删除或更新,执行必要的数据库操作的最佳方法是什么? 是否应该发出多个查询,每个受影响的实体一个? 还是应该使用数据库引擎可以解析的某种XML构造,以便只需要发出一个命令? 我之所以这么问,是因为我目前的商店中常见的一种模式是格式化包含所有更改的XML文档,然后将该字符串发送到数据库以由数据库引擎的XML功能处理。 但是,鉴于要执行的任务的简单性质,以这种方式使用XML似乎很麻烦。 这取决于您需要执行的操作数量以及运行所需的速度。如果只有少数几个,那么使用您执行单项操作所采用的任何机制一次执行一次即可。 如果您需要执行成千上万次操作,并且需要快速运行,则应重新使用连接和命令,并在每次迭代期间将参数的参数更改为查询的参数。这将最大限度地减少资源使用。您不想为每个操作重新创建连接和命令。 您没有提到正在使用的数据库,但是在SQL Server 2008中,可以使用表变量将这样的复杂数据传递给存储过程。在那里解析并执行您的操作。有关更多信息,请参见Scott Allen关于ode to code的文章。 答案取决于您正在谈论的数据量。如果您在内存中只有很少的一组记录需要同步回磁盘,则可能需要多个查询。如果数据量更大,则需要查看其他选项。 最近,我必须实现一种机制,其中外部数据源给了我约17,000行dta,这是我与本地表同步所需的。我选择的解决方案是将外部数据加载到临时表中,然后调用一个存储的proc,该proc完全在数据库中进行了同步。 从"业务实体"设计的角度来看,如果您要对一组实体中的每个实体执行不同的操作,则应让每个实体处理自己的持久性。 如果存在常见的批处理活动(例如,"删除所有早于x日期的内容"),我将在执行批处理更新或删除的集合类上编写静态方法。我通常让实体原子地处理自己的插入。 大多数数据库支持BULK UPDATE或BULK DELETE操作。 |