如何把一个DataTable中的某列通过表关系加到另外一个DataTable中

 

DataSet中是无法使用Select语句从多个表中自由选择字段组成新的视图的,只能利用DataTable间的关系把一个DataTable中的某列增加到另外一个DataTable中。

原理:

1.在DataTable间建立关系

2.把一个DataTable中的某列增加到另外一个DataTable

3.如果DataTable不再同一个DataSet中需要合并DataSet

实现代码如下:
None.gif using  System;
None.gif
using  System.Data;
None.gif
None.gif
namespace  BaseClassLibrary
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 基础类
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public class DataSetOperate
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public DataSetOperate()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//
InBlock.gif            
// TODO: 在此处添加构造函数逻辑
InBlock.gif            
//
ExpandedSubBlockEnd.gif
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 建立DataTable表间的关系
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="ds">需要建立关系的DataSet</param>
InBlock.gif        
/// <param name="primaryTableName">主键表名称</param>
InBlock.gif        
/// <param name="foreignTableName">外键表名称</param>
InBlock.gif        
/// <param name="primaryColumnName">主键列名称</param>
ExpandedSubBlockEnd.gif        
/// <param name="foreignColumnName">外键列名称</param>

InBlock.gif        public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            DataTable primaryTable 
= ds.Tables[primaryTableName];
InBlock.gif            DataTable foreignTable 
= ds.Tables[foreignTableName];
InBlock.gif            ds.Relations.Add(primaryTableName 
+ foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);            
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="ds">需要建立关系的DataSet</param>
InBlock.gif        
/// <param name="primaryTableName">主键表名称</param>
InBlock.gif        
/// <param name="foreignTableName">外键表名称</param>
InBlock.gif        
/// <param name="primaryColumnName">主键列名称</param>
InBlock.gif        
/// <param name="foreignColumnName">外键列名称</param>
InBlock.gif        
/// <param name="addColumnName">主键表中列名称</param>
ExpandedSubBlockEnd.gif        
/// <param name="newColumnName">外键表中新增列名称</param>

InBlock.gif        public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            DataTable primaryTable 
= ds.Tables[primaryTableName];
InBlock.gif            DataTable foreignTable 
= ds.Tables[foreignTableName];
InBlock.gif            ds.Relations.Add(primaryTableName 
+ foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
InBlock.gif            DataColumn newColumn 
= new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
InBlock.gif            ds.Tables[foreignTableName].Columns.Add(newColumn);
InBlock.gif            
int rowCount = ds.Tables[foreignTableName].Rows.Count;
InBlock.gif            
for(int i = 0;i < rowCount;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                DataRow parentCustomerDR 
= foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
InBlock.gif                foreignTable.Rows[i][newColumnName] 
= parentCustomerDR[addColumnName];
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 在向外建表DataTabe中增加列
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="ds">需要建立关系的DataSet</param>
InBlock.gif        
/// <param name="primaryTableName">主键表名称</param>
InBlock.gif        
/// <param name="foreignTableName">外键表名称</param>
InBlock.gif        
/// <param name="addColumnName">主键表中列名称</param>
ExpandedSubBlockEnd.gif        
/// <param name="newColumnName">外键表中新增列名称</param>

InBlock.gif        public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{        
InBlock.gif            DataTable primaryTable 
= ds.Tables[primaryTableName];
InBlock.gif            DataTable foreignTable 
= ds.Tables[foreignTableName];
InBlock.gif            DataColumn newColumn 
= new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
InBlock.gif            ds.Tables[foreignTableName].Columns.Add(newColumn);
InBlock.gif            
int rowCount = ds.Tables[foreignTableName].Rows.Count;
InBlock.gif            
for(int i = 0;i < rowCount;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                DataRow parentCustomerDR 
= foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
InBlock.gif                foreignTable.Rows[i][newColumnName] 
= parentCustomerDR[addColumnName];
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

转载于:https://www.cnblogs.com/pcbhyy/archive/2005/09/13/235655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值