使用GetItemById出错“Detected use of SPRequest for previously closed SPWeb object.”

这个log错误信息又出现了:“Detected use of SPRequest for previously closed SPWeb object.”。这次是在GetItemById这个方法中抛出的,很奇怪为什么这个方法会使用web。查看了一下代码才知道,这个方法确实用到了list的web属性。

GetItemById方法在获取item的步骤是

1.使用Query查询,通过传入的item的id,查询list中的item,得到一个SPListItemCollection集合,这个集合的名字是items。这里没有任何问题。

2.判断这个集合是不是空的集合,方法是使用items.Count属性,如果不是空的集合,就返回Items[0]这个item。问题出在items.Count这个属性,这个属性调用了SPListItemCollection的EnsureListItemsData()方法,这个方法中使用了list的Web,因此报出了下面的完整的错误信息:

Detected use of SPRequest for previously closed SPWeb object.  Please close SPWeb objects when you are done with all objects obtained from them, but not before.  Stack trace:    at Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData()     
at Microsoft.SharePoint.SPListItemCollection.get_Count()     
at Microsoft.SharePoint.SPList.GetItemById(String strId, Int32 id, String strRootFolder, Boolean cacheRowsetAndId, String strViewFields, Boolean bDatesInUtc)     
at Microsoft.SharePoint.SPList.GetItemById(Int32 id)   
at...

所以这个时候,需要检查list的web是否已经被释放了。

如何正确避免这样的错误请参见:点击打开链接

你可能感兴趣的:(使用GetItemById出错“Detected use of SPRequest for previously closed SPWeb object.”)