/// <summary> /// 取得欄位值,若不存在該欄位或為 DbNull 值,則傳回預設值。 /// </summary> /// <param name="row">資料列。</param> /// <param name="fieldName">欄位名稱。</param> /// <param name="defaultValue">預設值。</param> public static object GetFieldValue(DataRow row, string fieldName, object defaultValue) { object oFieldValue; // 若資料列為 Null 則傳回預設值 if (BaseFunc.IsNull(row)) { return(defaultValue); } // 若不存在該欄位,則傳回預設值 if (!HasField(row, fieldName)) { return(defaultValue); } oFieldValue = row[fieldName]; if (BaseFunc.IsNullOrDBNull(oFieldValue)) { return(defaultValue); // 若欄位值為 DbNull 值,則傳回預設值 } else { return(oFieldValue); } }
/// <summary> /// 由來源資料列異動目前資料列,目的資料列存在相同欄位,且不在排除欄位中時才會進行異動。 /// </summary> /// <param name="sourceRow">來源資料列。</param> /// <param name="destRow">目的資料列。</param> /// <param name="excludeFields">排除欄位</param> public static void UpdateRow(DataRow sourceRow, DataRow destRow, params string[] excludeFields) { DataTable oSoruceTable; DataTable oDestTable; if (BaseFunc.IsEmpty(sourceRow)) { return; } if (BaseFunc.IsEmpty(destRow)) { return; } oSoruceTable = sourceRow.Table; oDestTable = destRow.Table; foreach (DataColumn oColumn in oSoruceTable.Columns) { //確認該欄位是否存在於排除欄位中 var matchExcludeFields = from excludeField in excludeFields where StrFunc.SameText(excludeField, oColumn.ColumnName) select excludeField; if (matchExcludeFields.ToList().Count == 0 && oDestTable.Columns.Contains(oColumn.ColumnName) && !BaseFunc.IsNullOrDBNull(sourceRow[oColumn.ColumnName])) { destRow[oColumn.ColumnName] = sourceRow[oColumn.ColumnName]; } } }
/// <summary> /// 對目的資料表新增資料列,有相同欄位時才會塞值。 /// </summary> /// <param name="destDataTable">目的資料表。</param> /// <param name="sourceRow">來源資料列。</param> /// <param name="allowNull">是否允許Null值</param> public static void AddRow(DataTable destDataTable, DataRow sourceRow, bool allowNull = true) { DataRow oNewRow; string sColumnName; if (BaseFunc.IsNull(destDataTable)) { return; } if (BaseFunc.IsEmpty(sourceRow)) { return; } oNewRow = destDataTable.NewRow(); foreach (DataColumn column in destDataTable.Columns) { sColumnName = column.ColumnName; if (sourceRow.Table.Columns.Contains(sColumnName)) { var value = sourceRow[sColumnName]; if (allowNull || !BaseFunc.IsNullOrDBNull(value)) { oNewRow[sColumnName] = value; } } } destDataTable.Rows.Add(oNewRow); }
/// <summary> /// 由來源資料列異動目前資料列,目的資料列存在相同欄位時才會進行異動。 /// </summary> /// <param name="sourceRow">來源資料列。</param> /// <param name="destRow">目的資料列。</param> /// <param name="allowNull">是否允許Null值</param> public static void UpdateRow(DataRow sourceRow, DataRow destRow, bool allowNull = true) { DataTable oSoruceTable; DataTable oDestTable; if (BaseFunc.IsEmpty(sourceRow)) { return; } if (BaseFunc.IsEmpty(destRow)) { return; } oSoruceTable = sourceRow.Table; oDestTable = destRow.Table; foreach (DataColumn oColumn in oSoruceTable.Columns) { if (oDestTable.Columns.Contains(oColumn.ColumnName) && (allowNull || !BaseFunc.IsNullOrDBNull(sourceRow[oColumn.ColumnName]))) { destRow[oColumn.ColumnName] = sourceRow[oColumn.ColumnName]; } } }
/// <summary> /// 取得無 DbNull 的欄位值。 /// </summary> /// <param name="row">資料列。</param> /// <param name="fieldName">欄位值。</param> public static object GetFieldValueNotDbNull(DataRow row, string fieldName) { object oFieldValue; oFieldValue = row[fieldName]; if (BaseFunc.IsNullOrDBNull(oFieldValue)) { return(GetDefaultValue(row.Table.Columns[fieldName].DataType, EDateTimeDefault.MinValue)); } else { return(oFieldValue); } }