我試圖確定代碼庫中是否有明顯的錯誤,或者不是。如果我不處理我的IDataReader,我的連接是否會返回到池中?
有問題的代碼調用第三方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中讀取任何東西?
是否有必要保留返回的IDataReader的'DbCommand'正確工作? – spender
只是一個側面說明 - 暴露裸露的數據讀取器是一個可怕的設計。我不羨慕你。至少確保在完成數據讀取後處理它們。 –
@spender這是我的問題。我在想,IDataReader掛在數據庫連接上 – MStodd