详细内容
DataSet多表查询,支持别名
发布日期:2011-04-27     点击:3245     字体:[ ]

这里定义了一个类,用于处理DataSet多表查询,注意,网上流传的这个类是不支持别名的,例如 a.name nameValue,这里列别名是nameValue,程序经过修改,现已支持别名:

.类代码:

namespace Security.Web
{
    /// <summary>
    /// DataSetHelper 的摘要说明
    /// </summary>
    public class DataSetHelper
    {
        public DataSet ds;

        private System.Collections.ArrayList m_FieldInfo;
        private string m_FieldList;

        public DataSetHelper(ref DataSet DataSet)
        {
            ds = DataSet;
        }
        public DataSetHelper()
        {
            ds = null;
        }
        /**/
        /// <summary>
        /// 该方法根据给定的字段列表(FieldList)和表名(TableName),创建表结构,并返回表对象
        /// 给定的字段可来自创建了关系的两张表,如果是源表(子表)中的字段,直接写字段名即可。
        /// 如果是关系表(父表)中的字段,
        /// 字段前面须加上关系名称,格式如:relationname.fieldname
        /// FieldList语法:[relationname.]fieldname[ alias][,[relationname.]fieldname[ alias]]
        /// </summary>
        /// <param name="TableName">生成新结构表的表名</param>
        /// <param name="SourceTable">源表名(子表)</param>
        /// <param name="FieldList">生成新结构表的目标字段</param>
        /// <returns>具有目标结构的表对象</returns>
        public DataTable CreateJoinTable(string TableName, DataTable SourceTable, string FieldList)
        {
            if (FieldList == null)
            {
                throw new ArgumentException("You must specify at least one field in the field list.");
            }
            else
            {
                DataTable dt = new DataTable(TableName);
                ParseFieldList(FieldList, true);
                foreach (FieldInfo Field in m_FieldInfo)
                {
                    if (Field.RelationName == null)
                    {
                        DataColumn dc = SourceTable.Columns[Field.FieldName];
                        dt.Columns.Add(dc.ColumnName, dc.DataType, dc.Expression);
                    }
                    else
                    {
                        DataColumn dc = SourceTable.ParentRelations[Field.RelationName].ParentTable.Columns[Field.FieldName];

//这里的列应该用别名
                        dt.Columns.Add(Field.FieldAlias, dc.DataType, dc.Expression);
                    }
                }
                if (ds != null)
                    ds.Tables.Add(dt);
                return dt;
            }
        }
        /**/
        /// <summary>
        /// 该方法用于关联查询,可以指定条件(RowFilter),以及排序字段(Sort);
        /// 直接将查询结果存储到DestTable表对象中\n
        /// 在FieldList中的字段可以是关系表中的字段,但是它的前面必须加上关系名称,格式如:relationname.fieldname
        /// 用于指定查询条件的字段和用于排序的字段只能是源表中的字段,不能是关系表中的字段
        /// FieldList语法:[relationname.]fieldname[ alias][,[relationname.]fieldname[ alias]]
        /// </summary>
        /// <param name="DestTable">用于存储查询结果的表对象</param>
        /// <param name="SourceTable">源表名(子表)</param>
        /// <param name="FieldList">查询结果的目标字段</param>
        /// <param name="RowFilter">查询条件</param>
        /// <param name="Sort">排序字段</param>
        public void InsertJoinInto(DataTable DestTable, DataTable SourceTable, string FieldList, string RowFilter, string Sort)
        {
            if (FieldList == null)
            {
                throw new ArgumentException("You must specify at least one field in the field list.");
            }
    

用户评论
昵称 
内容  *
验证码   
   
Copyright © 2010 zdbase.com All Rights Reserved. 苏ICP备15039389号 可人软件设计