Example #1
0
        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);
        }
Example #2
0
        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);