[英]C# script - SQL query best practice
我有一个 Excel 文件,其中包含一长串用户名。 Col A 包含旧用户名 Col. B 具有新名称。 我想根据 excel 文件重命名 SQL 表中的用户。 我的问题如下:在我遍历 excel 的循环中多次调用 SQL 是否可以? 或者有没有更好的方法来打开单个连接并使用“一个”go 进行所有 SQL 更新查询?
您应该将 Excel 表加载到数据库中的一个表中,该表具有(至少)两列,称为old_username
和new_username
。
然后您可以直接在数据库中运行update
。 您尚未指定数据库。 但由于 C# 标记,我将提供 SQL 服务器语法进行更新——此语法因数据库而异:
update u
set username = nc.new_username
from users u join -- the table you want to update
name_changes nc
on u.username = nc.old_username;
也就是说,通常最好将数据放入数据库并在那里完成所有工作。
这个问题的答案总是“取决于”和“你能证明它是正确的” 。
除了对与错之外,您的业务案例可能包括的情况并非意味着多个连接是可接受的解决方案。
迭代数据列表时,虽然性能不是最好的,但执行只会影响数据库中单个记录的单个语句通常是可以接受的。
但是,您通常不会创建多个连接。 一个标准的代码模式是在循环之外创建一个连接,并为每个事务重用相同的连接。
using (var conn = new SqlConnection(connectionString))
{
...
start a transaction
...
try
{
foreach(var record in dataRecords)
{
try
{
...
Execute your transactions
...
}
catch(SqlException sx)
{
...
Process the exception,
record relevant information based on the input parameters for this record
...
throw; // or throw a new exception with formatted info...
}
}
}
catch(Exception ex)
{
...
rollback the transaction
...
}
}
基于集合的方法通常可以提供更好的性能,但是从最佳实践的角度来看,这需要一些管道设置,Gordon Linoff 的这个建议也很有效。
多个事务或同一事务中的多个执行是可以接受的,但是应该避免多个连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.