设为首页 收藏本站
查看: 609|回复: 0

[经验分享] c#,sharepoint,2007,moss,spsitedataquery,跨列表查询,跨网站查询,join,联合查询

[复制链接]

尚未签到

发表于 2015-9-26 07:40:21 | 显示全部楼层 |阅读模式
  最近在研究WSS V3开发的基本知识,在联合查询,也就是跨列表查询碰到了问题,我照着列子做了,可是出不来结果,没有报错,但是结果为零。
下面是代码,大家可以帮我看一下,有什么问题,还有啊,我的MSN:jorden008@hotmail.com,欢迎大家和我交流,共同进步,共同 MOSS MVP,哈哈。

我建立了一个网站,三个列表,
签到信息:姓名,签到时间,签退时间
班次设置:班次名称,开始时间,结束时间
排班设置:姓名,班次名称
现在想联合班次列表和排版列表,根据姓名查询班次的开始、结束时间,这要是用sql,就好弄多了,



select 姓名,班次名称,开始时间,结束时间 from 班次设置 inner join  排班设置 on  班次设置.班次名称=排班设置.班次名称 where 姓名=“virus”  可是在sharepoint中,就是没有结果,下面是我的代码,谢谢大家了,如果有了结果,我也会及时更新的



using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.SharePoint;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            SPSite site = new SPSite("http://virus/sites/intranet/");
            SPWeb web = site.OpenWeb("sdev");
            SPSiteDataQuery siteQuery = new SPSiteDataQuery();

            siteQuery.Webs = "<Webs Scope=\"SiteCollection\" />";
            
            //siteQuery.Lists = string.Format("<Lists><List ID='{0}' /><List ID='{1}' /></Lists>",
            //    web.Lists["班次设置"].ID, web.Lists["排班设置"].ID);
            //siteQuery.ViewFields = string.Format("<FieldRef Name='{0}' /><FieldRef Name='{1}' /><FieldRef Name='{2}' />",
            //    web.Lists["排班设置"].Fields["姓名"].InternalName, web.Lists["班次设置"].Fields["开始时间"].InternalName,
            //    web.Lists["班次设置"].Fields["结束时间"].InternalName);
            //siteQuery.RowLimit = 10;
            siteQuery.Query = string.Format("<Where><Eq><FieldRef Name='{0}' /><Value Type='Text'>{1}</Value></Eq></Where>",
                web.Lists["排班设置"].Fields["姓名"].InternalName, "史文彬");

            DataTable dt = web.GetSiteData(siteQuery);
            foreach (DataRow row in dt.Rows)
            {
                foreach (DataColumn col in dt.Columns)
                {
                    Console.WriteLine(col.ColumnName+":"+row[col].ToString());
                }
            }

            Console.ReadLine();
        }
    }
}
  要么就是下面的结果,不是我想要的啊
ListId:{9E71D527-5169-42D6-8A91-8B9EB1430521}
WebId:{42EF18F6-3FA5-4CAF-A176-3F0F1E81B8AB}
ID:2
ListId:{E78A92E8-7831-4E1F-B222-B370E0F7AC8B}
WebId:{42EF18F6-3FA5-4CAF-A176-3F0F1E81B8AB}
ID:1



using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.SharePoint;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            SPSite site = new SPSite("http://virus/sites/intranet/");
            SPWeb web = site.OpenWeb("sdev");
            SPSiteDataQuery siteQuery = new SPSiteDataQuery();

            siteQuery.Webs = "<Webs Scope=\"SiteCollection\" />";


            siteQuery.Lists = string.Format("<Lists><List ID='{0}' /><List ID='{1}' /></Lists>", web.Lists["排班设置"].ID, web.Lists["班次设置"].ID);
            siteQuery.ViewFields = string.Format("<FieldRef Name='{0}' /><FieldRef Name='{1}' />",
                web.Lists["排班设置"].Fields["姓名"].InternalName, web.Lists["排班设置"].Fields["班次名称"].InternalName);
           
            
            siteQuery.RowLimit = 10;
            siteQuery.Query = string.Format("<Where><Eq><FieldRef Name='{0}' /><Value Type='Text'>{1}</Value></Eq></Where>",
                web.Lists["排班设置"].Fields["姓名"].InternalName, "史文彬");

            DataTable dt = web.GetSiteData(siteQuery);

            Console.WriteLine("数据显示开始");
            foreach (DataRow row in dt.Rows)
            {
                Console.WriteLine("=========================================");
                foreach (DataColumn col in dt.Columns)
                {
                    Console.WriteLine(col.ToString()+":"+row[col].ToString());
                }
               Console.WriteLine("=========================================");
            }

            Console.WriteLine("数据显示完毕");
            Console.ReadLine();
        }
    }
}
  这个也可以,但是只是显示了我的名字和我的班次,想要显示我的班次的时间就不行了,不知道为什么啊,还有啊,我发现他会一直显示三个ID,webID,listID,本身的ID,可能是为了确定唯一吧。
苦恼中。。。。。。。。。。。。。。。。。。。。。。。。



研究的最终结果如下:



using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.SharePoint;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            SPSite site = new SPSite("http://virus/sites/intranet/");
            SPWeb web = site.OpenWeb("sdev");
            SPSiteDataQuery siteQuery = new SPSiteDataQuery();

            siteQuery.Webs = "<Webs Scope=\"SiteCollection\" />";

            siteQuery.Lists = string.Format("<Lists><List ID='{0}' /><List ID='{1}' /></Lists>", web.Lists["排班设置"].ID, web.Lists["班次设置"].ID);
            siteQuery.ViewFields = string.Format("<FieldRef Name='{0}' Nullable=\"TRUE\" /><FieldRef Name='{1}' Nullable=\"TRUE\" />",
                web.Lists["排班设置"].Fields["姓名"].InternalName, web.Lists["班次设置"].Fields["开始时间"].InternalName);
            
            siteQuery.RowLimit = 10;
            siteQuery.Query = string.Format("<Where><Eq><FieldRef Name='{0}' /><Value Type='Text'>{1}</Value></Eq></Where>",
                web.Lists["排班设置"].Fields["姓名"].InternalName, "史文彬");

            DataTable dt = web.GetSiteData(siteQuery);

            Console.WriteLine("数据显示开始");
            foreach (DataRow row in dt.Rows)
            {
                Console.WriteLine("=========================================");
                foreach (DataColumn col in dt.Columns)
                {
                    Console.WriteLine(col.ToString()+":"+row[col].ToString());
                }
               Console.WriteLine("=========================================");
            }

            Console.WriteLine("数据显示完毕");
            Console.ReadLine();
        }
    }
}
程序运行正常,结果如下:

数据显示开始
=========================================
ListId:6E63F720-249C-4E10-A2E5-F36EEDCE0C75
WebId:42EF18F6-3FA5-4CAF-A176-3F0F1E81B8AB
ID:3
_x59d3__x540d_:virusswb
_x5f00__x59cb__x65f6__x95f4_:2008-11-05T16:00:00Z
=========================================
=========================================
ListId:E78A92E8-7831-4E1F-B222-B370E0F7AC8B
WebId:42EF18F6-3FA5-4CAF-A176-3F0F1E81B8AB
ID:1
_x59d3__x540d_:virusswb
_x5f00__x59cb__x65f6__x95f4_:
=========================================
数据显示完毕

说明什么呢,说明它所谓的联合查询crossing query不是我以前理解的那种联合两个表来查询内容,比如说联合学生表和学生课程关系表和课程表查询学生的选课情况,而是把你指定的lists中的列表记录中,有你关心的列的记录全部找出来,可能列表1是:姓名,性别,列表2是:姓名,爱好,特长
查询列表1和列表2的结果就是
virusswb,男性(来自列表1)
virusswb,体育,.NET(来自列表2)

我错了,方向性错误,555555555555555555555555

为什么不支持sql中的联合查询呢,我认为很有用啊,还是我没有发现,请发现者可以留言,谢谢。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118850-1-1.html 上篇帖子: Sharepoint学习笔记—Ribbon系列 下篇帖子: SharePoint 2010之LINQ与SPMetal
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表