gpt4 book ai didi

c# - 如果我不处置我的 IDataReader,我的连接是否会返回到池中?

转载 作者:行者123 更新时间:2023-11-30 15:31:11 26 4
gpt4 key购买 nike

我正在尝试确定代码库中是否存在明显的错误。

有问题的代码调用第三方 dll,它返回一个 IDataReader。如果代码使用读取器而不处理它,它不会显式返回到池中,对吗?

调用代码如下:

IDataReader rdr = db.ExecSPGetDataReader("dbo.someStoredProcedure", paramList);
if (rdr.Read())
{
List<nameValuePair> formValues = Utils.nameValuePairs(rdr["valuepairs"].ToString());
foreach (nameValuePair nvp in formValues)
{
if (nvp.name.ToLower() == "name")
{
outString = nvp.value;
break;
}
}
}

这是反编译后的第三方dll代码:

    public IDataReader ExecSPGetDataReader(string sp, List<param> paramList)
{
IDataReader dataReader;
using (DbCommand dbC = this.setDBCommand(sp, paramList, true))
{
IDataReader dr = this._db.ExecuteReader(dbC);
this.setOutputParams(dbC, paramList);
dataReader = dr;
}
return dataReader;
}

看起来该命令已被处理掉,可能是为了处理连接,但如果这是真的,那么如何从返回的 IDataReader 中读取任何内容?

最佳答案

If the code uses the reader without disposing of it, it won't be explicitly returned to the pool, correct?

没错。将代码更改为:

using (IDataReader rdr =
db.ExecSPGetDataReader("dbo.someStoredProcedure", paramList))
{
if (rdr.Read())
{
List<nameValuePair> formValues =
Utils.nameValuePairs(rdr["valuepairs"].ToString());
foreach (nameValuePair nvp in formValues)
{
if (nvp.name.ToLower() == "name")
{
outString = nvp.value;
break;
}
}
}
}

using 语句将确保调用 Dispose

关于c# - 如果我不处置我的 IDataReader,我的连接是否会返回到池中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21098639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com