在使用GETITEMBYID()之前检查异常

时间:2010-03-13 22:13:32

标签: sharepoint

我通过getiembyid获取项目...但我想在使用它之前检查项目是否存在...我不想使用查询作为使用Getitembyid的主要目的是性能.....任何想法如何实现这一点...

itemid = Response.QueryString["loc"];
    SPList mylist = myweb.GetList(SPUrlUtility.CombineUrl(myweb.ServerRelativeUrl, "/Lists/Location"));

//现在id itemid不存在它抛出异常...所以我想在使用以下语句之前检查itemid存在...我知道我可以检查抛出SPQuery但是正如我上面说的因为性能问题只有im使用itemid ....

  SPListItem myitem = mylist.GetItemById(Convert.ToInt32(itemid));

知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

SPQuery决不会让你的代码变慢,实际上网上的每篇其他SharePoint文章都建议你使用SPQuery来获得性能。为了让事情更有趣,GetItemByID在内部使用SPQuery将Item提取回给你,以下是从GetItemByID函数中获取的代码的一部分

  SPQuery query = new SPQuery();
  query.Query = "<Where><Eq><FieldRef Name=\"ID\"></FieldRef><Value Type=\"Integer\">" + id.ToString(CultureInfo.InvariantCulture) + "</Value></Eq></Where>";

这里要注意的重要事项是SPQuery有一个名为SingleItemId的Internal属性,它接受你想要获取的Item Id的Id,因为调用最终在COM对象中出现,所以无法找到它的使用方式。

据说你有两种选择 选项1:

将您的GetItemByID代码包装在catch块中并检查异常,如果发生异常,您可以标记一个标记以表示该Item Id无效并对其采取措施。

选项2:使用SPQuery,可以测试时差GetItemByID&amp;使用SPQuery,你会看到没有,只有很少。

相关问题