c#,sharepoint,2007,moss,spsitedataquery,跨列表查询,跨网站查询,join,联合查询

最近在研究WSS V3开发的基本知识,在联合查询,也就是跨列表查询碰到了问题,我照着列子做了,可是出不来结果,没有报错,但是结果为零。
下面是代码,大家可以帮我看一下,有什么问题,还有啊,我的MSN:[email protected],欢迎大家和我交流,共同进步,共同 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中的联合查询呢,我认为很有用啊,还是我没有发现,请发现者可以留言,谢谢。

你可能感兴趣的:(SharePoint)