哪种模式更适合SqlConnection对象?
哪种模式更适合SqlConnection
对象? 哪个性能更好? 你提供任何其他模式吗?
class DataAccess1 : IDisposable { private SqlConnection connection; public DataAccess1(string connectionString) { connection = new SqlConnection(connectionString); } public void Execute(string query) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = query; command.CommandType = CommandType.Text; // ... command.Connection.Open(); command.ExecuteNonQuery(); command.Connection.Close(); } } public void Dispose() { connection.Dispose(); } }
VS
class DataAccess2 : IDisposable { private string connectionString; public DataAccess2(string connectionString) { this.connectionString = connectionString; } public void Execute(string query) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = connection.CreateCommand(); command.CommandText = query; command.CommandType = CommandType.Text; // ... command.Connection.Open(); command.ExecuteNonQuery(); command.Connection.Close(); } } public void Dispose() { } }
建议使用DataAccess2
。 但这是个人偏好。 有些人甚至可能会建议你的class级是static
很难说一个人比另一个人更有表现力。 你正走在IDisposable
的道路上,这很棒。
我很乐意在您的问题中阅读和维护上面显示的两种风格。
考虑让你的DAL能够从.config读取连接字符串,而不是专门允许在构造函数中传递值。
public DataAccess2(string connStr) { this.connectionString = connStr; } public DataAccess2() { this.connectionString = ConfigurationManager.ConnectionStrings["foo"].ConnectionString; }
考虑将SqlCommand包装在一个using
中。
using (var conn = new SqlConnection(connectionString)) { using(var cmd = conn.CreateCommand()) { } }
没有真正的方法来回答这个问题。 简短的,规范的答案是,连接应该在您工作单元的整个生命周期内保持活跃状态。 因为我们无法知道如何使用DataAccess
(它是否存在于应用程序的生命周期中,或者您实例化它并在您执行某些操作时将其处理掉?),因此无法给出具体的答案。
话虽这么说,我会推荐第一个模式,但是根据需要实例化和处理你的DataAccess
对象; 不要让它长时间不必要。
我认为这取决于你的DataAccess对象的使用方式,如果它在’using’子句中使用,那么保证连接在完成之后被处理掉。
但总的来说,我更喜欢第二种模式,因为sql连接是在Execute方法中创建和处理的,所以当你忘记处理DataAccess对象时,它不太可能被打开。
考虑到sql连接可能是一个稀疏资源,我认为应该尽一切努力确保它们不被浪费。
如果进行并发调用,第一个将导致错误。 第二个将确保您为每个命令使用干净连接,从而产生更多连接。
我同意上面的陈述,它取决于使用的场景,克服与第一个相关的问题我有一个需要使用这种模式的包装器,所以我设置一个字段值boolean来表明正在执行一个命令在连接上已经“排队”下一个执行命令。
当然会出现您可能更喜欢使用多个连接的情况……
上述就是C#学习教程:哪种模式更适合SqlConnection对象?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/943181.html