Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Sql server Net SQLClient。线程中连接的最佳实践_Sql Server_Vb.net - Fatal编程技术网

Sql server Net SQLClient。线程中连接的最佳实践

Sql server Net SQLClient。线程中连接的最佳实践,sql-server,vb.net,Sql Server,Vb.net,我有一个DLL,它可以读取和写入SQL Server数据库。调用模块当前在调用DLL之前设置与数据库的连接 该模块在不同的线程上调用DLL,因此可能有30-40个线程同时运行,这些线程都调用了DLL的公共方法 问题是,对于SQL Server,所有线程使用相同的连接(即从主模块传递的连接)更好吗,还是每个线程都应该建立自己的连接 我目前使用公共连接获得了它,但我不断从一些线程中得到错误,说“已经有一个打开的DataReader与此命令关联,必须先关闭。”尽管我的所有读卡器都在monitor.en

我有一个DLL,它可以读取和写入SQL Server数据库。调用模块当前在调用DLL之前设置与数据库的连接

该模块在不同的线程上调用DLL,因此可能有30-40个线程同时运行,这些线程都调用了DLL的公共方法

问题是,对于SQL Server,所有线程使用相同的连接(即从主模块传递的连接)更好吗,还是每个线程都应该建立自己的连接


我目前使用公共连接获得了它,但我不断从一些线程中得到错误,说“已经有一个打开的DataReader与此命令关联,必须先关闭。”尽管我的所有读卡器都在monitor.enter/exit块中,因此在monitor.exit(obj)之前找到读卡器已联系到。

谢谢大家的建议。传递连接字符串并允许线程创建自己的连接似乎解决了这个问题。“DataReader”问题是由我在连接上创建了一个读卡器,然后协商使用它引起的。。。嘿嘿…

谢谢大家的建议。传递连接字符串并允许线程创建自己的连接似乎解决了这个问题。“DataReader”问题是由我在连接上创建了一个读卡器,然后协商使用它引起的。。。嘿嘿…

听起来你回答了自己的问题。在一个线程上执行的某些操作将阻止任何其他线程为任何事情使用相同的连接不要使用公共连接。所有示例和教程都有一个使用语句尽快关闭连接的
,这是有原因的。关闭连接将释放服务器上使用的所有锁和资源。连接池意味着您不必在下次打开连接时支付重新连接罚款。我同意其他人的观点,即通过单个连接进行所有连接都会导致问题。为什么要这样做,而不是连接池,让每个线程根据需要从池中获取连接?谢谢。老实说,我对线程还不熟悉。我将重新使用建议的方法,看看效果如何。听起来你回答了自己的问题。在一个线程上执行的某些操作将阻止任何其他线程为任何事情使用相同的连接不要使用公共连接。所有示例和教程都有一个使用
语句尽快关闭连接的
,这是有原因的。关闭连接将释放服务器上使用的所有锁和资源。连接池意味着您不必在下次打开连接时支付重新连接罚款。我同意其他人的观点,即通过单个连接进行所有连接都会导致问题。为什么要这样做,而不是连接池,让每个线程根据需要从池中获取连接?谢谢。老实说,我对线程还不熟悉。我将重新使用建议的方法,看看效果如何。