private DataTable Fill(MapInfo info, SyncTableContent content) { DataTable dt = GetTable(info); for (int i = 0; i < content.Rows.Count; i++) { var row = dt.NewRow(); dt.Rows.Add(row); } for (int columnIndex = 0; columnIndex < content.Columns.Count; columnIndex++) { var columnName = content.Columns[columnIndex]; if (!dt.Columns.Contains(columnName)) { continue; } var columnInfo = dt.Columns[columnName]; try { Func <object, object> formatFunc = null; var mapColumnInfo = info.Columns.FirstOrDefault( x => string.Equals(x.Name, columnName, StringComparison.OrdinalIgnoreCase)); if (mapColumnInfo != null) { formatFunc = mapColumnInfo.Format; } if (formatFunc == null) { formatFunc = GetFormat(columnInfo); } for (int i = 0; i < content.Rows.Count; i++) { var dataArray = content.Rows[i]; //如果当前单元格不允许为空,那么设置默认值 if (columnIndex >= dataArray.Length && !columnInfo.AllowDBNull) { dt.Rows[i][columnName] = GetDefaultValue(columnInfo.DataType); continue; } //设置第I行第n列的值 dt.Rows[i][columnName] = formatFunc(dataArray[columnIndex]); } } catch (Exception ex) { _logger.Error(ex, string.Format("列设置出错 ColumnName:{0} DataType:{1}", columnInfo.ColumnName, columnInfo.DataType)); } } return(dt); }
public override void InsertOrUpdate(SyncTableContent table) { string tablename = table.TableName.ToLower(); //TODO 具体插入数据库操作 var mapInfo = Get(tablename); if (mapInfo == null) { return; } var dt = Fill(mapInfo, table); List <string> primaryKeys = (table.PrimaryKeys ?? new List <string>()); InsertOrUpdate(tablename, dt, primaryKeys); }
/// <summary> /// 更新数据实现 /// </summary> /// <param name="table"></param> public abstract void InsertOrUpdate(SyncTableContent table);