Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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
C# dbConn.openinside使用 using中的dbConn.Open()将使用不同的连接池吗 如果问题1为真,并且代码到达返回值,则此代码是否会使2打开连接挂起_C#_Connection Pool - Fatal编程技术网

C# dbConn.openinside使用 using中的dbConn.Open()将使用不同的连接池吗 如果问题1为真,并且代码到达返回值,则此代码是否会使2打开连接挂起

C# dbConn.openinside使用 using中的dbConn.Open()将使用不同的连接池吗 如果问题1为真,并且代码到达返回值,则此代码是否会使2打开连接挂起,c#,connection-pool,C#,Connection Pool,它将创建一个新连接,当使用块到达末尾时,该连接将被丢弃。 当您不再需要连接时,如果在using块中有更多的内容,但using块将处理这些,那么最好关闭连接 当代码到达返回值时,它将退出using语句,然后进行处理。它并不是像你所要求的那样返回并且没有结束。 一旦执行离开该范围,就会调用dispose。 即使出现异常,也会调用Dispose using块被编译成try-catch-finally块,finally始终被执行,finally包含Dispose using中的dbConn.Open()

它将创建一个新连接,当使用块到达末尾时,该连接将被丢弃。 当您不再需要连接时,如果在using块中有更多的内容,但using块将处理这些,那么最好关闭连接

当代码到达返回值时,它将退出using语句,然后进行处理。它并不是像你所要求的那样返回并且没有结束。 一旦执行离开该范围,就会调用dispose。 即使出现异常,也会调用Dispose

using块被编译成try-catch-finally块,finally始终被执行,finally包含Dispose

using中的dbConn.Open()将使用不同的连接池吗

只有一个“连接池”

如果问题1为真,并且代码到达返回值,则此代码是否会使2打开连接挂起

问题1是错误的,但实际情况如下:

  • using语句中的代码创建连接对象
  • 调用
    Open()
    时,connection对象会从池中请求现有的数据库连接,如果池中没有数据库连接,则会创建一个数据库连接(可能是池实际创建的,但这是一个实现细节)
  • 当块结束(或抛出异常)时,using块超出范围,连接对象被释放,从而关闭并释放数据库连接

因此,只有一个连接对象和一个数据库连接。当using块超出范围时(通过完成或我抛出异常),它会自动处理。

不同于什么?对于问题#1,我的意思是它会打开另一个连接吗?@juharr如果连接打开,你会得到一个exception@RaoHammas使用语句可确保连接将被关闭和释放,没必要close@Mrky正确,由于using语句,它将在超出范围时关闭并处理。我建议你多读一些。它会创建一个新的连接对象,但是你忽略了问题的池方面。
using (IDbConnection dbConn = new System.Data.SqlClient.SqlConnection(ConnectionString))
{
    dbConn.Open();
    ...
    return result;
}