Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 超时已过期_C#_Linq_Stored Procedures_Timeoutexception - Fatal编程技术网

C# 超时已过期

C# 超时已过期,c#,linq,stored-procedures,timeoutexception,C#,Linq,Stored Procedures,Timeoutexception,我正在编写C#代码,并使用LINQ和一些存储过程,我在打开和关闭连接时非常小心,但我一直遇到这个错误 Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached. 我的代码运行

我正在编写C#代码,并使用LINQ和一些存储过程,我在打开和关闭连接时非常小心,但我一直遇到这个错误

Timeout expired.  
The timeout period elapsed prior to obtaining a connection from the pool.  
This may have occurred because all pooled connections were in use and max pool size was reached.
我的代码运行良好,除了出现此错误,我能做些什么

谢谢你的建议

 public static List<int> GetIslemIdleribySPbyCariId(int cariId)
    {
        string connString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer1"].ConnectionString;

        SqlConnection sqlConn = new SqlConnection(connString);
        sqlConn.Open();

        List<int> islemidleri = new List<int>();
        islemidleri.Clear();

        SqlCommand cmd;
        cmd = new SqlCommand("GetIslemIdleri", sqlConn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@CARIID", cariId));

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                islemidleri.Add(reader.GetInt32(0));

            }
            cmd.Parameters.Clear();
        }

        sqlConn.Close();

        return islemidleri;

    }
    /// <summary>
    /// SP kullanarak dovizturlerini döndürür
    /// </summary>
    /// <returns>string listesi döndürür için döviz türleri var TL, USD vs.</returns>
    public static List<string> GetDovizTurleribySP()
    {
        string connString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer1"].ConnectionString;

        SqlConnection sqlConn = new SqlConnection(connString);
        sqlConn.Open();

        List<string> dovizTanimlari = new List<string>();

        string commandGetDovizTanimlari = "EXEC GetDovizTanimlari";
        SqlCommand cmd;
        cmd = new SqlCommand(commandGetDovizTanimlari, sqlConn);

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                dovizTanimlari.Add(reader.GetString(0));
            }

        }
        return dovizTanimlari;

    }
公共静态列表getIsleMidlePropertySpByCariID(int-cariId)
{
string connString=System.Configuration.ConfigurationManager.ConnectionString[“LocalSqlServer1”].ConnectionString;
SqlConnection sqlConn=新的SqlConnection(connString);
sqlConn.Open();
List islemidleri=新列表();
islemidleri.Clear();
SqlCommand命令cmd;
cmd=新的SqlCommand(“GetIslemIdleri”,sqlConn);
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.Add(新的SqlParameter(“@carid”,carid));
使用(var reader=cmd.ExecuteReader())
{
while(reader.Read())
{
islemidleri.Add(reader.GetInt32(0));
}
cmd.Parameters.Clear();
}
sqlConn.Close();
返回islemidleri;
}
/// 
///SP kullanarak dovizturlerini döndürür
/// 
///在döviz türleri var TL中列出的字符串döndürürçiç,美元对美元。
公共静态列表GetDovizTurleribySP()
{
string connString=System.Configuration.ConfigurationManager.ConnectionString[“LocalSqlServer1”].ConnectionString;
SqlConnection sqlConn=新的SqlConnection(connString);
sqlConn.Open();
List dovizTanimlari=新列表();
字符串命令GetDovizTanimlari=“EXEC GetDovizTanimlari”;
SqlCommand命令cmd;
cmd=新的SqlCommand(commandGetDovizTanimlari,sqlConn);
使用(var reader=cmd.ExecuteReader())
{
while(reader.Read())
{
添加(reader.GetString(0));
}
}
返回dovizTanimlari;
}

在看到您的代码后,我想指出两件事,将您的SqlCommand、DataReader和sqlConnection包装在using语句中(是嵌套的using语句),并且当您创建List时,您不必事后调用clear(),因为List应该已经初始化为emtpy(至少我认为在c中是这样)。我建议您使用
using
语句来确保即使发生异常,连接也会关闭

它可能看起来像这样

public static List<string> GetDovizTurleribySP()
{
  string connString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer1"].ConnectionString;

  using (SqlConnection sqlConn = new SqlConnection(connString))
  {
    sqlConn.Open();

    List<string> dovizTanimlari = new List<string>();

    string commandGetDovizTanimlari = "EXEC GetDovizTanimlari";
    SqlCommand cmd;
    cmd = new SqlCommand(commandGetDovizTanimlari, sqlConn);

    using (var reader = cmd.ExecuteReader())
    {
      while (reader.Read())
      {
        dovizTanimlari.Add(reader.GetString(0));
      }

    }
    return dovizTanimlari;
  }
}
public静态列表GetDovizTurleribySP()
{
string connString=System.Configuration.ConfigurationManager.ConnectionString[“LocalSqlServer1”].ConnectionString;
使用(SqlConnection sqlConn=newsqlconnection(connString))
{
sqlConn.Open();
List dovizTanimlari=新列表();
字符串命令GetDovizTanimlari=“EXEC GetDovizTanimlari”;
SqlCommand命令cmd;
cmd=新的SqlCommand(commandGetDovizTanimlari,sqlConn);
使用(var reader=cmd.ExecuteReader())
{
while(reader.Read())
{
添加(reader.GetString(0));
}
}
返回dovizTanimlari;
}
}

测试和测试:

Close(); 
Dispose(); 
SqlConnection.ClearPool(connection); 
SqlConnection.ClearAllPools(); 
使用expression等工具,我终于发现每个OpenConnection的“开放池”问题没有重用维护的“池”(等待命令),导致ASP.NET客户端应用程序饱和(唯一的方法是重新启动IIS以释放),我意识到这是对.config中连接字符串的调用:

*System.Configuration.ConfigurationManager.ConnectionStrings ["ConnectionSQL"] ConnectionString.;*
显然,他调用了外部程序集,导致连接字符串或散列中出现“差异”

解决方案:

我把集合加起来:

System.Configuration"** and replacement implicitly invoking: ConfigurationManager.ConnectionStrings ["ConnectionSQL"] ConnectionString;

这就解决了问题,每个“Open()”都不再执行“pool”(池)。

你能展示一些代码来演示你是如何管理连接的吗?@Chris Taylor我刚刚添加了一些代码Taylor先生。我没有像这样使用它,但我现在会尝试,谢谢你的建议。谢谢,我将重新生成代码,我找到了错误的原因。返回dovizTanimlari;之前,它只是缺少一个sqlConn.Close()这就是使用语句很方便的地方,即使抛出异常,也会关闭并清除所有异常,这意味着您没有逻辑错误谢谢Taylor先生,我刚刚看到缺少的sqlConn.Close()。我从你的代码中了解到,如果我使用“using”,我就不必编写sqlConn.Close(),对吗?@emriviliyaz,对。using语句实际上将代码包装在try/finally中,并对using语句引用的对象调用Dispose方法。这将确保即使由于异常或提前返回等原因代码未到达函数末尾,连接也会关闭。对于DataReader,您使用了相同的概念,您可以确保一旦完成读卡器,读卡器就会关闭,这很好。