C# 使用SQL Server时,请使用Using语句防止打开连接
这是使用C# 使用SQL Server时,请使用Using语句防止打开连接,c#,sql-server,database,using,C#,Sql Server,Database,Using,这是使用using语句在不使用时保持与数据库的连接关闭的正确方法 我有一个构造函数来设置我的连接字符串,并设置一个新的连接,如下所示: public MSSQL() { string ConnectionString = "The address to database"; connection = new SqlConnection(ConnectionString); } 然后我想在这里调用获取数据的函数: public async Task AddEm
using
语句在不使用时保持与数据库的连接关闭的正确方法
我有一个构造函数来设置我的连接字符串,并设置一个新的连接,如下所示:
public MSSQL()
{
string ConnectionString = "The address to database";
connection = new SqlConnection(ConnectionString);
}
然后我想在这里调用获取数据的函数:
public async Task AddEmployee(Employee emp, string storedProcedureToAddEmployee = "AddEmployee")
{
MSSQL rep = new MSSQL();
using (rep.connection) { await connection.QueryAsync<Employee>(storedProcedureToAddEmployee, "Adding all info"}
}
public异步任务AddEmployee(Employee emp,string-storedProcedureToAddEmployee=“AddEmployee”)
{
MSSQL rep=新的MSSQL();
使用(rep.connection){wait connection.QueryAsync(storedProcedureToAddEmployee,“添加所有信息”}
}
下面是我如何解释他的解决方案(解释得非常模糊)
public异步任务AddEmployee(Employee emp,string-storedProcedureToAddEmployee=“AddEmployee”)
{
使用(IDbConnection con=newSQLConnection(“ConnectionString”))
{
等待con.QueryAsync(storedProcedureToAddEmployee,“添加所有信息”);
}
}
它们有何不同,或者我遗漏了什么?只需指出:后台的Db驱动程序可以并且将根据需要处理连接,因此在代码中关闭连接并不一定会关闭真正的连接(很可能只有事务)中间部分看起来很危险,因为您正在处理一个您不拥有的对象。^并且所有者也不会试图处理它。如果您有一个类存储/负责
SqlConnection
,该类应该实现IDisposable
本身,您应该使用该类,并且该类应该d在其dispose中处置连接。您似乎一开始就不需要该类。根本不要将连接存储在字段中。第三个选项实际上是唯一的选项。ADO.NET的连接池会重置连接并将其放在连接池中以备重用,因此缓存连接对象不会带来任何好处。事实上,缓存的连接将保留从以前的查询中获取的任何锁,在第三种情况下(可能只是使用(var con=new SqlConnection(..)来)会逐渐导致数据库冲突增加和阻塞)
,在将连接放回连接池之前重置连接时,将回滚所有现有事务,并释放所有获取的锁。下次需要连接时,将从连接池中获得一个现有的干净连接
public async Task AddEmployee(Employee emp, string storedProcedureToAddEmployee = "AddEmployee")
{
using (IDbConnection con = new SqlConnection("ConnectionString"))
{
await con.QueryAsync<Employee>(storedProcedureToAddEmployee, "Adding all info");
}
}