Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在数据库调用之间共享ASP.NET Web App中的SqlConnection对象_.net_Asp.net_Sql_Ado.net - Fatal编程技术网

在数据库调用之间共享ASP.NET Web App中的SqlConnection对象

在数据库调用之间共享ASP.NET Web App中的SqlConnection对象,.net,asp.net,sql,ado.net,.net,Asp.net,Sql,Ado.net,是否有一种方法可以在来自至少相同页面、相同请求或整个应用程序的调用之间高效地共享单个SqlConnection实例?如果您使用的是ADO.NET或任何使用ADO.NET的框架,那么它可能已经适合您了 您使用的是什么数据库?-连接池可能因数据库类型而异 您始终可以通过监视数据库服务器连接来验证这一点 例如,在SQL Server上,sp_who2将列出所有连接。查找计算机上的连接,注意spid(每个连接的唯一标识)在web应用程序页面加载之间保持不变。如果您使用的是ADO.NET或任何使用ADO.

是否有一种方法可以在来自至少相同页面、相同请求或整个应用程序的调用之间高效地共享单个SqlConnection实例?

如果您使用的是
ADO.NET
或任何使用
ADO.NET
的框架,那么它可能已经适合您了

您使用的是什么数据库?-连接池可能因数据库类型而异

您始终可以通过监视数据库服务器连接来验证这一点


例如,在SQL Server上,sp_who2将列出所有连接。查找计算机上的连接,注意spid(每个连接的唯一标识)在web应用程序页面加载之间保持不变。

如果您使用的是
ADO.NET
或任何使用
ADO.NET
的框架,那么它可能已经适合您了

您使用的是什么数据库?-连接池可能因数据库类型而异

您始终可以通过监视数据库服务器连接来验证这一点


例如,在SQL Server上,sp_who2将列出所有连接。查找计算机上的连接,注意spid(每个连接的唯一标识)在web应用程序页面加载之间保持不变。

这是一个非常糟糕的主意
SqlConnection
实现了
IDisposable
,这意味着您必须尽快处理它以释放资源


如前所述,发动机罩下的连接池已经优化了连接的创建。我知道,如果你开始保持联系,最终可能会出现严重问题。

这真是个坏主意
SqlConnection
实现了
IDisposable
,这意味着您必须尽快处理它以释放资源


如前所述,发动机罩下的连接池已经优化了连接的创建。如果你开始保持连接,你可能会遇到严重的问题,我明白了。

如果你想知道如何做到这一点,答案是在页面中声明一个SqlConnection类型的静态变量,并在所有页面方法中使用它访问数据库;然而,这是一个糟糕的想法,原因有很多:

  • 正如许多人指出的那样,SQLConnections是池连接,没有必要尝试避免为每次数据库访问打开连接。这样做不会带来任何性能提升

  • 请记住,向应用程序发出的每个请求都将由从应用程序池中获取的不同线程提供服务。如果您有这样一个静态变量,那么对同一页面的两个并发请求可能会访问同一个SqlConnection实例,并且您可能会遇到这样一种情况:当第二个请求从DB检索数据时,第一个请求可能会意外地关闭连接

  • 您应该在应用程序体系结构的不同层执行数据访问操作。一个好的方法是让业务层引用应用程序数据访问层,而应用程序数据访问层负责执行数据访问操作。这提供了更好的封装、关注点分离,并提高了可维护性、可重用性等


  • 如果您想知道如何做到这一点,答案是在页面内声明一个SqlConnection类型的静态变量,并在所有页面方法内使用它访问数据库;然而,这是一个糟糕的想法,原因有很多:

  • 正如许多人指出的那样,SQLConnections是池连接,没有必要尝试避免为每次数据库访问打开连接。这样做不会带来任何性能提升

  • 请记住,向应用程序发出的每个请求都将由从应用程序池中获取的不同线程提供服务。如果您有这样一个静态变量,那么对同一页面的两个并发请求可能会访问同一个SqlConnection实例,并且您可能会遇到这样一种情况:当第二个请求从DB检索数据时,第一个请求可能会意外地关闭连接

  • 您应该在应用程序体系结构的不同层执行数据访问操作。一个好的方法是让业务层引用应用程序数据访问层,而应用程序数据访问层负责执行数据访问操作。这提供了更好的封装、关注点分离,并提高了可维护性、可重用性等


  • 为何为什么不使用连接池呢?我只是想,当我关闭()某个东西时,.NET真的会关闭它,哈哈,但是正如Neil精辟地说明的那样,我的假设完全不正确。为什么?为什么不使用连接池呢?我只是想当我关闭()某个东西时,.NET真的会关闭它,哈哈,但正如尼尔精辟地说明的那样,我的假设是完全错误的。投票失败的原因是什么?我曾在许多内存泄漏的项目中工作过,这是罪魁祸首。投票失败的原因是什么?我在很多内存泄漏的项目中工作过,这是罪魁祸首。