Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# SQLDataReader和CommandBehavior.CloseConnection_C#_Sqldatareader_Sqlconnection - Fatal编程技术网

C# SQLDataReader和CommandBehavior.CloseConnection

C# SQLDataReader和CommandBehavior.CloseConnection,c#,sqldatareader,sqlconnection,C#,Sqldatareader,Sqlconnection,我有一个名为“db”的泛型类,它直接与数据库对话。并具有一个名为“ExecuteDataReader”的方法,如下所示: public SqlDataReader ExecuteDataReader(SqlCommand cmd) { try { OpenConnection(); cmd.Connection = conn; cmd.C

我有一个名为“db”的泛型类,它直接与数据库对话。并具有一个名为“ExecuteDataReader”的方法,如下所示:

public SqlDataReader ExecuteDataReader(SqlCommand cmd)
        {
            try
            {
                OpenConnection();
                cmd.Connection = conn;
                cmd.CommandType = CommandType.StoredProcedure;              

                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                return dr;
            }
            catch (Exception ex)
            {
                Utils.Debug(string.Format("Err in {0}.{1} : {2}\nSQL : {3}", this.GetType(), "ExecuteDataReader", ex.Message, cmd.CommandText));
                return null;
            }            
        }
然后,我执行资源密集型查询,该查询循环遍历10000个父记录和20000个子记录以在数据库中更新。然后我得到了以下错误:

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.
为了解决这些问题,我必须在执行之后显式调用dr.Close()

static void ProcessAssessmentCriteria(string UnitReference)
        {
            SqlCommand cmd = new SqlCommand("TRACKING.DBTool_GetUniqueAssessmentCriteriaByUnitReference");
            cmd.Parameters.Add("@UnitReference", SqlDbType.VarChar, 20).Value = UnitReference;

            SqlDataReader dr = db.ExecuteDataReader(cmd);

            if (dr.HasRows)
            {
                while (dr.Read())
                {                    
                    ProcessDetailAssessmentCriteria(UnitReference, dr["AssessmentRefNumber"].ToString());
                    Console.WriteLine("---------------");
                }
            }

            dr.Close();
        }

据我所知,commandBehavior.CloseConnection()会自动关闭连接。但现在似乎还没有结束。你能告诉我吗?谢谢。

CommandBehavior.CloseConnection from

执行该命令时,关联的连接对象为 当关联的DataReader对象关闭时,关闭


因此,只有当您关闭数据读取器时,连接才会关闭。

哦,是的。我误解了