gpt4 book ai didi

c# - 为什么 "CreateCommand()"不是 C#(或至少是 .NET)的一部分?

转载 作者:行者123 更新时间:2023-11-30 19:18:14 26 4
gpt4 key购买 nike

在成功完成与 SQL Server 一起学习 C# 的初始阶段后,我发现我使用的各种教程只是通过声明全局 SqlConnectionSqlDataAdapter< 弄错了 甚至 DataSet 变量。

因此,这段代码在单线程应用程序中运行良好,但在多线程环境中却表现不佳。在我对解决方案的研究中,我发现 MSDNthis educational answer建议在 using/try 方法中包装 SQL 事务的“原子”部分:

private static void CreateCommand(string queryString, string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
catch (InvalidOperationException)
{
//log and/or rethrow or ignore
}
catch (SqlException)
{
//log and/or rethrow or ignore
}
catch (ArgumentException)
{
//log and/or rethrow or ignore
}
}
}

所以,我现在要做的是将我的整个代码转换为使用这样的包装器。但在继续进行之前,我想了解这种方法的权衡。根据我的经验,大型设计师/工程师团队通常有充分的理由决定包含某些防御功能。从我作为 C/C++ 程序员的角度来看,当 C# 的整个值(value)主张是“防御性”(其中权衡是众所周知的 CLR 性能损失)时,这尤其有趣。

总结我的问题:

  1. 如上所述,在我的代码中封装每笔交易有哪些权衡?
  2. 有什么我应该注意的注意事项吗?

最佳答案

原因在于灵 active 。开发人员是否希望将命令包含在事务中,他们是否希望重试给定错误,如果是多少次,他们是否希望从线程池建立连接或每次都创建一个新连接(具有性能开销),他们想要 SQL 连接还是更通用的 DbConnection 等。

但是,MS 提供了企业库,这是一套功能,在开源库中包含了很多常见的处理方法。看一下数据访问 block : http://msdn.microsoft.com/en-us/library/ff632023.aspx

关于c# - 为什么 "CreateCommand()"不是 C#(或至少是 .NET)的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541131/

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