代码之家  ›  专栏  ›  技术社区  ›  Kb.

帮助改进迁移程序

  •  0
  • Kb.  · 技术社区  · 15 年前

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

    希望能得到更好地设计以下迁移程序的想法。

    对于名为viewname1的视图,迁移程序的原型如下所示(原型中的其他视图也是如此):

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

    目前,我们正在使用odt(Oracle开发人员工具)for.NET with 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个private onerow()函数
    以及第10个private buildFormat()函数(Oracle中的每个视图都有一个,代码闻起来很香)。
    我知道这可以做得更好更快,这将使新视图的设置更容易,处理更改也更容易。

    欢迎提出任何建议。
    谢谢。

    2 回复  |  直到 15 年前
        1
  •  2
  •   No AI now No AI ever    15 年前

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

        2
  •  1
  •   David Aldridge    15 年前

    我认为我可以自动在这些视图之上构建视图,就像亚当在元数据上说的那样。通过将所有字段转换为文本(对日期使用显式转换)并将字段集中在一起,使每个视图成为一列,然后将该单列转储到文本文件中。