我有java的经验,正在尝试从c开始。我已经阅读了sqlconnection sqlcommand sqldatareader idisposable,我可以理解连接到db的最佳实践是 Package SqlConnection
, SqlCommand
以及 SqlDataReader
以他们自己的方式 using
阻止。
但是在java中,我们使用的是将连接封装到工厂方法中,只创建一次,并将其重用于所有查询,甚至多线程查询。只为每个查询创建语句和结果集,并尽快关闭。
不是在创造一个新的 SqlConnection
每次询问都有点过分?不能重复使用吗?
5条答案
按热度按时间wlwcrazw1#
创建类的新示例
SqlConnection
不创建到sql server的新网络连接,但租用现有连接(或创建新连接)。net为您处理物理连接池。当您完成连接(通过它可以发送多个查询)后,只需
Close()
或者Dispose()
(或使用using{}
最好是块)。不需要缓存
SqlConnection
班级。jobtbby32#
mssqlserver在自己的连接池中管理连接,而这些连接实际上并没有被释放。但是它们是关闭的,所以您可以最小化网络流量并释放到服务器的可用连接。
另外,您应该注意,如果您使用的是linqtosql,那么在释放连接之前,数据上下文不会释放连接,因此我建议您只使用已经在工作的代码,不要尝试自己对其进行优化。
fafcakar3#
正如vmatm所说,.net自己将连接池化,因此完全可以重新创建它们。因此,我通常会为整个过程编写一个 Package 器,就像这样。
jdg4fx2g4#
要回答您的特定问题,可以重用
SqlConnection
对于每个查询。请确保关闭当前查询(SqlDataReader
等)然后再运行另一个using
阻碍。8oomwypt5#
是的,您可以创建一个全局sqlconnection示例。在我的例子中,我使用sqlconnection作为通过singleton访问的datacontext的成员。
您可以通过关闭和打开此连接来封装事务,即:
或者您可以保持连接处于打开状态,但具体来说是开始和结束事务: