C# asp.net中的传输和连接池
我使用的数据库访问代码如下:C# asp.net中的传输和连接池,c#,asp.net,transactions,database-connection,connection-pooling,C#,Asp.net,Transactions,Database Connection,Connection Pooling,我使用的数据库访问代码如下: //gets the connection and create transaction SqlTransaction transaction = SelectConnection(); try { dsRecordDataset = new DataSet(); SqlParameter[] param = new SqlParameter[1]; string[] taleNames = new string[1]; taleN
//gets the connection and create transaction
SqlTransaction transaction = SelectConnection();
try
{
dsRecordDataset = new DataSet();
SqlParameter[] param = new SqlParameter[1];
string[] taleNames = new string[1];
taleNames[0] = "RecordSet";
param[0] = new SqlParameter("@Mode", Mode);
SqlHelper.FillDataset(transaction, CommandType.StoredProcedure,
"spProject", dsRecordDataset, taleNames, param);
transaction.Commit();
return dsRecordDataset;
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
我发现的问题是,我从未关闭连接,因此连接池可能会溢出,有时会给用户一个错误。我需要澄清以下几点
finally
{
if (transaction.Connection.State == ConnectionState.Open)
{
transaction.Connection.Close();
}
}
但是连接是空的,并给出一个错误
根据asp.net中的默认设置,连接池何时重置 如果MinPoolSize未在连接字符串中指定或指定为零,则池中的连接将在一段不活动时间后关闭。但是,如果指定的MinPoolSize大于零,则在卸载AppDomain并结束进程之前,不会销毁连接池。 提交事务是否与连接有关? 否,提交连接不会(不应该)关闭连接 在上面的代码中有没有关闭连接的方法
您可以使用Connection对象的Close或Dispose方法,或者通过在C#中打开using语句中的所有连接来完成此操作,以便将它们返回到连接池。未显式关闭的连接可能不会被添加或返回到池中。您得到了答案,但对于问题3),您可能会发现在本例中using语句非常有用。不过,这意味着代码更改,但这是确保资源关键对象安全的好方法。(就像你的SqlConnection) 这只是一个非常简单的示例,但此语句自动调用实现IDisposable接口的对象的Dispose方法。(如SqlConnection) 如果您对此感兴趣,可以在此处找到更多详细信息和解释: 您似乎正在返回一个(断开连接的)数据集,因此请关闭连接。使用、连接快速搜索ADO.NET
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = "mysp_GetValue";
command.CommandType = CommandType.StoredProcedure;
connection.Open();
object ret = command.ExecuteScalar();
}