帮助改进迁移计划

时间:2009-12-02 18:15:18

标签: c# .net oracle data-migration

我们在Oracle中有200多个视图,应该将这些视图转换为200多个具有固定长度字段的平面文件。

希望能够更好地设计以下迁移例程。

迁移程序的原型对于名为VIEWNAME1的视图看起来像这样(对于原型中的其他视图也是如此):

StronglyTypedDataSet views = new StronglyTypedDataSet();
ViewName1TableAdapter tableAdapter = new ViewName1TableAdapter();
tableAdapter.Fill(views.VIEWNAME1   );
mapFromViewToFlatFile(views.VIEWNAME1);

目前,我们正在使用ODT(Oracle开发者工具)for .Net和c#。

每个视图的映射例程:

private void mapFromViewToFlatFile(DataTable table)
{
            StringBuilder format = BuildFormat();
            StringBuilder outBuf = new StringBuilder();
            foreach (views.VIEWNAME1Row row in table.Rows)
            {
                OneRow(outBuf, format, row);
            }
            SerializeToFile(outBuf, FILENAME);
}

private void OneRow(StringBuilder outBuf, StringBuilder format,views.VIEWNAME1Row row)
{
    outBuf.AppendFormat(format.ToString(),
                    row.COLUMNNAME1.Trim(),
                    row.IsCOLUMNNAME2Null() ? string.Empty : row.COLUMNNAME2.Trim()
     );
    OutBuf.AppendLine();
}


private StringBuilder BuildFormat()
{
        StringBuilder format = new StringBuilder();
        format.Append("{0,-14}");
        format.Append("{1,-36}");
        return format;
}

写完后 第10个私人OneRow()函数
和第10个私有BuildFormat()函数(Oracle中的每个视图都有一个,代码闻起来) 而且我知道可以更好更快地完成这项工作,这样可以更轻松地设置新视图,并更轻松地处理更改。

欢迎提出任何建议 感谢。

2 个答案:

答案 0 :(得分:2)

如果表中列的固定长度与文件中的长度匹配,那么您可以通常查询user_tab_columns以查看列大小。然后,您可以从数据库元数据中自动构建格式。

答案 1 :(得分:1)

我认为,基于Adam在元数据上所说的,我会根据这些视图自动构建视图。通过将所有字段转换为文本(使用日期的显式转换)并将字段连接在一起,并将该单个列转储到文本文件,使每个视图成为一个列。