如何把一个DataTable中的某列通过表关系加到另外一个DataTable中
2005-09-13 18:27
666 查看
在DataSet中是无法使用Select语句从多个表中自由选择字段组成新的视图的,只能利用DataTable间的关系把一个DataTable中的某列增加到另外一个DataTable中。
原理:
1.在DataTable间建立关系2.把一个DataTable中的某列增加到另外一个DataTable中3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
2.把一个DataTable中的某列增加到另外一个DataTable中3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
原理:
1.在DataTable间建立关系2.把一个DataTable中的某列增加到另外一个DataTable中3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
2.把一个DataTable中的某列增加到另外一个DataTable中3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
3.如果DataTable不再同一个DataSet中需要合并DataSet实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
实现代码如下:
using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}
相关文章推荐
- 如何把一个DataTable中的某列通过表关系加到另外一个DataTable中
- 如何把一个DataTable中的某列通过表关系加到另外一个DataTable中
- 如何把已经属于一个DataSet的DataTable加到另一个DataSet中解决方法
- 如何通过一个程序启动另外一个程序
- 如何通过ContentHub把内容从一个地方传到另外一个地方
- 如何将一个通过LINQ查找出来并重新构造的匿名对象转化成DATATABLE
- 如何通过函数在div中插入另外一个jsp
- 一个DataTable的数据如何导入另外一个DataTable中!!
- java中一个子线程如何通过interrupt手段来停止另外一个子线程
- INFORMIX如何通过TRIGGER实现复制同一个表的一个字段到另外一个字段
- 通过echo将字符串、某个文件文档 加到另外一个文件的末端
- ADO.NET Entity Framework如何:通过每种类型一个表继承以定义模型(实体框架)
- ADO.NET Entity Framework 如何:通过每种类型一个表继承以定义模型(实体框架)
- 如何通过一个IP和子网掩码得到网络地址和广播地址
- sql 如何把一个查询结果当作一个表来查询?(sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询)
- Javascript如何用一个优雅的姿势通过getStyle函数来获取元素的样式
- 通过反射把一个类的值传给另外一个类
- 如何使用asp.net中的控件将一个图片文件从一个目录传到另外一个目录下?
- 本章通过先总体介绍UICollectionView及其常用方法,再结合一个实例,了解如何使用UICollectionView
- .net C#线程连接Join的技巧,如何真正让一个线程结束,另外一个线程启动