Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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# asp.net中的传输和连接池_C#_Asp.net_Transactions_Database Connection_Connection Pooling - Fatal编程技术网

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;
}
我发现的问题是,我从未关闭连接,因此连接池可能会溢出,有时会给用户一个错误。我需要澄清以下几点

  • 根据asp.net中的默认设置,连接池何时重置
  • 提交事务是否与连接有关
  • 在try catch块之后,我尝试使用以下代码

    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();  
    }