You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
6.8 KiB
166 lines
6.8 KiB
using System;
|
|
using System.Data;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
|
|
namespace SiaSun.LMS.Common
|
|
{
|
|
/// <summary>
|
|
/// 基础类
|
|
/// </summary>
|
|
public class DataSetOperate
|
|
{
|
|
/// <summary>
|
|
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
|
|
/// </summary>
|
|
public DataSetOperate()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 复制数据集合结构
|
|
/// </summary>
|
|
public DataTable CopyDataTableColumns(DataTable tableSource)
|
|
{
|
|
DataTable tableCopy = new DataTable();
|
|
foreach (DataColumn col in tableSource.Columns)
|
|
{
|
|
DataColumn colCopy = new DataColumn();
|
|
colCopy.ColumnName = col.ColumnName;
|
|
colCopy.DataType = col.DataType;
|
|
colCopy.DefaultValue = col.DefaultValue;
|
|
colCopy.AllowDBNull = col.AllowDBNull;
|
|
colCopy.Unique = col.Unique;
|
|
tableCopy.Columns.Add(colCopy);
|
|
}
|
|
return tableCopy;
|
|
}
|
|
|
|
#region ----设置DataTable的约束
|
|
|
|
/// <summary>
|
|
/// 设置列主键
|
|
/// </summary>
|
|
/// <param name="columnName">列名</param>
|
|
/// <param name="table">数据源表</param>
|
|
public void SetKeys(System.Data.DataTable table, params string[] columnName)
|
|
{
|
|
List<DataColumn> listColumn = new List<DataColumn>();
|
|
|
|
//查找匹配的列,添加到主键集合内
|
|
foreach (string s in columnName)
|
|
{
|
|
if (table.Columns.Contains(s))
|
|
{
|
|
listColumn.Add(table.Columns[s]);
|
|
if (listColumn.Count == columnName.Length)
|
|
break;
|
|
}
|
|
}
|
|
//设置主键集合
|
|
table.PrimaryKey = listColumn.ToArray();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置列是否是唯一
|
|
/// </summary>
|
|
/// <param name="columnName">列名</param>
|
|
/// <param name="table">数据源表</param>
|
|
/// <param name="isUnique">是否唯一</param>
|
|
public void SetUnique(string columnName, System.Data.DataTable table, bool isUnique)
|
|
{
|
|
foreach (DataColumn col in table.Columns)
|
|
{
|
|
if (col.ColumnName == columnName)
|
|
{
|
|
col.Unique = isUnique;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置列是否允许空
|
|
/// </summary>
|
|
/// <param name="columnName">列名</param>
|
|
/// <param name="table">数据源表</param>
|
|
/// <param name="isNull">是否唯一</param>
|
|
public void SetNull(string columnName, System.Data.DataTable table, bool isNull)
|
|
{
|
|
foreach (DataColumn col in table.Columns)
|
|
{
|
|
if (col.ColumnName == columnName)
|
|
{
|
|
col.AllowDBNull = isNull;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ------表间关系操作
|
|
|
|
/// <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>
|
|
/// <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];
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|