如何在C#中为多个请求保持单个SQL Server连接实例打开?

我有一个Web API,其中包含C#中的数据库插入逻辑(ado.net)。 当多个用户(例如100个用户)调用Web API时,每次打开SQL Server连接并关闭多个请求。 它会降低性能。

如何为多个请求保持单个SQL Server连接? 我必须保持SQL连接只打开一次并在一段时间后关闭,以便在此期间它应该考虑多个请求并在数据库中插入记录。

请建议。

ADO.NET的SqlConnection正在实现一个连接池。 这意味着当您关闭或处置SqlConnection的实例时,底层连接只会返回池。 当打开另一个SqlConnection实例,并且连接池中的连接可用时,将使用该连接。
事实上,关于SQL Server连接池的 Microsoft文档页面明确指出:

警告
我们强烈建议您在使用完毕后始终关闭连接,以便将连接返回到池中。 您可以使用Connection对象的Close或Dispose方法,或打开C#中using语句内的所有连接,或Visual Basic中的Using语句来执行此操作。 未显式关闭的连接可能不会添加或返回到池中。 有关更多信息,请参阅使用语句或如何:为Visual Basic处置系统资源。

这意味着使用SqlConnection的最佳实践方法是:

 using(var con = new SqlConnection(connectionString)) { // your sql stuff goes here... } 

BTW, SqlCommandSqlDataReaderSqlDataAdapter也实现了IDisposable接口,因此它们也需要在using语句的上下文中using

 using(var con = new SqlConnection(connectionString)) { using(var cmd = new SqlCommand(sql, con)) { // prepare command here - parameters and stuff like that // either using(var reader = cmd.ExecuteReader()) { } // or using(var adapter = new SqlDataAdapter(cmd)) { } } } 

好吧,你必须保持连接打开很简单,如果有任何读者打开它们就会被关闭。

 var con = new SqlConnection("Your connection String"); con.open(); //your code con.close()//after you have done your executions 

你试过Linq吗? 它做你想做的同样的事情,它保持连接活着,我认为它会更容易