本文整理汇总了C#中IDataTable.GetColumn方法的典型用法代码示例。如果您正苦于以下问题:C# IDataTable.GetColumn方法的具体用法?C# IDataTable.GetColumn怎么用?C# IDataTable.GetColumn使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDataTable
的用法示例。
在下文中一共展示了IDataTable.GetColumn方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateIndexForRelation
/// <summary>给所有关系字段建立索引</summary>
/// <param name="table"></param>
protected virtual void CreateIndexForRelation(IDataTable table)
{
foreach (var dr in table.Relations)
{
// 跳过主键
var dc = table.GetColumn(dr.Column);
if (dc == null || dc.PrimaryKey) continue;
if (table.GetIndex(dr.Column) == null)
{
var di = table.CreateIndex();
di.Columns = new String[] { dr.Column };
// 这两个的关系,唯一性
di.Unique = dr.Unique;
di.Computed = true;
table.Indexes.Add(di);
}
}
}
示例2: ReBuildTable
protected virtual String ReBuildTable(IDataTable entitytable, IDataTable dbtable)
{
// 通过重建表的方式修改字段
String tableName = dbtable.Name;
String tempTableName = "Temp_" + tableName + "_" + new Random((Int32)DateTime.Now.Ticks).Next(1000, 10000);
tableName = FormatName(tableName);
tempTableName = FormatName(tempTableName);
// 每个分号后面故意加上空格,是为了让DbMetaData执行SQL时,不要按照分号加换行来拆分这个SQL语句
StringBuilder sb = new StringBuilder();
sb.AppendLine("BEGIN TRANSACTION; ");
sb.AppendFormat("Alter Table {0} Rename To {1}", tableName, tempTableName);
sb.AppendLine("; ");
sb.Append(CreateTableSQL(entitytable));
sb.AppendLine("; ");
// 如果指定了新列和旧列,则构建两个集合
if (entitytable.Columns != null && entitytable.Columns.Count > 0 && dbtable.Columns != null && dbtable.Columns.Count > 0)
{
StringBuilder sbName = new StringBuilder();
StringBuilder sbValue = new StringBuilder();
foreach (IDataColumn item in entitytable.Columns)
{
String name = item.Name;
IDataColumn field = dbtable.GetColumn(item.Name);
if (field == null)
{
// 如果新增了不允许空的列,则处理一下默认值
if (!item.Nullable)
{
if (item.DataType == typeof(String))
{
if (sbName.Length > 0) sbName.Append(", ");
if (sbValue.Length > 0) sbValue.Append(", ");
sbName.Append(FormatName(name));
sbValue.Append("''");
}
else if (item.DataType == typeof(Int16) || item.DataType == typeof(Int32) || item.DataType == typeof(Int64) ||
item.DataType == typeof(Single) || item.DataType == typeof(Double) || item.DataType == typeof(Decimal))
{
if (sbName.Length > 0) sbName.Append(", ");
if (sbValue.Length > 0) sbValue.Append(", ");
sbName.Append(FormatName(name));
sbValue.Append("0");
}
else if (item.DataType == typeof(DateTime))
{
if (sbName.Length > 0) sbName.Append(", ");
if (sbValue.Length > 0) sbValue.Append(", ");
sbName.Append(FormatName(name));
sbValue.Append(Database.FormatDateTime(Database.DateTimeMin));
}
}
}
else
{
if (sbName.Length > 0) sbName.Append(", ");
if (sbValue.Length > 0) sbValue.Append(", ");
sbName.Append(FormatName(name));
//sbValue.Append(FormatName(name));
// 处理字符串不允许空
if (item.DataType == typeof(String) && !item.Nullable)
sbValue.Append(Database.StringConcat(FormatName(name), "\'\'"));
else
sbValue.Append(FormatName(name));
}
}
sb.AppendFormat("Insert Into {0}({2}) Select {3} From {1}", tableName, tempTableName, sbName.ToString(), sbValue.ToString());
}
else
{
sb.AppendFormat("Insert Into {0} Select * From {1}", tableName, tempTableName);
}
sb.AppendLine("; ");
sb.AppendFormat("Drop Table {0}", tempTableName);
sb.AppendLine("; ");
sb.Append("COMMIT;");
return sb.ToString();
}
示例3: GuessRelation
/// <summary>猜测表间关系</summary>
/// <param name="table"></param>
/// <param name="rtable"></param>
/// <param name="rname"></param>
/// <param name="column"></param>
/// <param name="name"></param>
/// <returns></returns>
public virtual Boolean GuessRelation(IDataTable table, IDataTable rtable, String rname, IDataColumn column, String name)
{
if (name.Length <= rtable.Name.Length || !name.StartsWith(rtable.Name, StringComparison.OrdinalIgnoreCase)) return false;
var key = name.Substring(rtable.Name.Length);
var dc = rtable.GetColumn(key);
// 猜测两表关联关系时,两个字段的类型也必须一致
if (dc == null || dc.DataType != column.DataType) return false;
// 建立关系
var dr = table.CreateRelation();
dr.Column = column.Name;
dr.RelationTable = rtable.Name;
dr.RelationColumn = dc.Name;
// 表关系这里一般是多对一,比如管理员的RoleID=>Role+Role.ID,对于索引来说,不是唯一的
dr.Unique = false;
// 当然,如果这个字段column有唯一索引,那么,这里也是唯一的。这就是典型的一对一
if (column.PrimaryKey || column.Identity)
dr.Unique = true;
else
{
var di = table.GetIndex(column.Name);
if (di != null && di.Unique) dr.Unique = true;
}
dr.Computed = true;
if (table.GetRelation(dr) == null) table.Relations.Add(dr);
// 给另一方建立关系
//foreach (IDataRelation item in rtable.Relations)
//{
// if (item.Column == dc.Name && item.RelationTable == table.Name && item.RelationColumn == column.Name) return dr;
//}
if (rtable.GetRelation(dc.Name, table.Name, column.Name) != null) return true;
dr = rtable.CreateRelation();
dr.Column = dc.Name;
dr.RelationTable = table.Name;
dr.RelationColumn = column.Name;
// 那么这里就是唯一的啦
dr.Unique = true;
// 当然,如果字段dc不是主键,也没有唯一索引,那么关系就不是唯一的。这就是典型的多对多
if (!dc.PrimaryKey && !dc.Identity)
{
var di = rtable.GetIndex(dc.Name);
// 没有索引,或者索引不是唯一的
if (di == null || !di.Unique) dr.Unique = false;
}
dr.Computed = true;
if (rtable.GetRelation(dr) == null) rtable.Relations.Add(dr);
return true;
}
示例4: CheckColumnsChange
protected override string CheckColumnsChange(IDataTable entitytable, IDataTable dbtable, NegativeSetting setting)
{
foreach (var item in entitytable.Columns)
{
// 自增字段必须是主键
if (item.Identity && !item.PrimaryKey)
{
// 取消所有主键
item.Table.Columns.ForEach(dc => dc.PrimaryKey = false);
// 自增字段作为主键
item.PrimaryKey = true;
break;
}
}
//String sql = base.CheckColumnsChange(entitytable, dbtable, onlySql);
// 把onlySql设为true,让基类只产生语句而不执行
var set = new NegativeSetting();
set.CheckOnly = true;
set.NoDelete = setting.NoDelete;
var sql = base.CheckColumnsChange(entitytable, dbtable, set);
if (String.IsNullOrEmpty(sql)) return sql;
// 只有修改字段、删除字段需要重建表
if (!sql.Contains("Alter Column") && !sql.Contains("Drop Column"))
{
if (!setting.CheckOnly) Database.CreateSession().Execute(sql);
return sql;
}
var sql2 = sql;
sql = ReBuildTable(entitytable, dbtable);
if (String.IsNullOrEmpty(sql) || setting.CheckOnly) return sql;
// 输出日志,说明重建表的理由
WriteLog("SQLite需要重建表,因无法执行:{0}", sql2);
Boolean flag = true;
// 如果设定不允许删
if (setting.NoDelete)
{
// 看看有没有数据库里面有而实体库里没有的
foreach (var item in dbtable.Columns)
{
var dc = entitytable.GetColumn(item.ColumnName);
if (dc == null)
{
flag = false;
break;
}
}
}
if (flag) Database.CreateSession().Execute(sql);
return sql;
}