我在下面有一个示例数据访问方法设计,它递归调用:
public static void DeleteRecord(SqlConnection connection, string childIds, string parentSheetname)
{
using (var adapter = new SqlDataAdapter("...", connection))
{
//fill a datatable
string newIds = "...";
string newParentName = "...";
const string query = "DELETE FROM table " +
"WHERE ids in (@ids) AND parent = @parent";
//Here's where recursion takes place
DeleteRecord(connection, newIds, newParentName);
using (var command = new SqlCommand(query, connection))
{
var parameters = new[] {
new SqlParameter(...), new SqlParameter(...)
}
command.Parameters.AddRange(parameters);
command.ExecuteNonQuery();
}
}
我的问题是:
(作为一种好习惯)可以将连接作为参数传递吗?
是否可以将
DeleteRecord
方法放在a上,Task
所以每次我调用它时,命令执行查询都没有等待时间。(当然有Task.WaitAll(tasks)
地方)- 在场景 2 中,连接是否会阻止通过服务器发送的多个查询?如果 SQLServer 执行繁重的查询,我已经体验过它会暂停一些查询。(默认情况下启用连接池,所以我想知道这是否也是第 3 项的情况)