回答

收藏

可以保持sql连接打开吗?

技术问答 技术问答 206 人阅读 | 0 人回复 | 2023-09-14

我正在通过com端口连续接收数据并进行一些解码。解码完成后,我必须将结果存储在sql数据库中。我在想,因为解码是每秒完成数十次(在while循环中始终运行),并且如果明智的做法是打开和关闭与sql
2 T. g% |% [0 d. [server的连接,则每秒需要将数据存储到数据库数十次。每个while循环或只是使其保持打开状态并继续将数据写入数据库。首先这可能吗?其次,如果连接保持打开状态,那么第三方应用程序或计算机可以同时访问数据库并在程序存储数据时读取数据吗?& X4 E+ m: m) I! s, n
               
( B0 u! Q9 b) w% G7 |! K& c3 S, E, ]解决方案:" ^- z8 R$ \  G* }6 h' n$ [; m( G
                : E# b* e# C. o4 i

6 y# k, f$ E" e& Q  K
! |2 Y+ Y0 o* |% m- F9 W                一个数据库支持多个并发连接,因此,在这种情况下,使数据库连接保持打开状态是非常可行的-& U  j& y8 j. ]# Y2 Z. ?5 A
只有在长时间运行的查询导致行/表锁定的情况下,您才可以锁定其他数据库。完成后,只需关闭连接即可。
7 B( y1 g/ B* L- J还应考虑到尽管大多数数据库(即SQL Server)在内部使用连接池,所以即使您关闭了数据库连接,它也只是返回到池中,而不是在物理上关闭-池管理着物理数据库连接-, x% y2 |) {0 N% e5 m! L
这样会更好性能,因此快速减少了打开/关闭连接的影响。* p4 ?$ k- c9 m$ W4 t: v1 n
从MSDN:9 |, b1 w6 _& `: A9 Z

9 l, V* |  ?# h) _6 m* x. a( ]连接池减少了必须打开新连接的次数。池管理者维护物理连接的所有权。它通过为每个给定的连接配置保留一组活动的连接来管理连接。每当用户在连接上调用“打开”时,池管理器就会在池中寻找可用的连接。如果池化连接可用,它将把它返回给调用者,而不是打开一个新的连接。当应用程序在连接上调用“关闭”时,池化程序将其返回到活动连接的池化集中,而不是将其关闭。一旦将连接返回到池中,就可以在下一个Open调用中重用该连接。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则