【问题标题】:Import data from another table and mapping in xml file [closed]从另一个表导入数据并在 xml 文件中映射 [关闭]
【发布时间】:2014-02-02 18:00:15
【问题描述】:

我正在使用 sql server 创建 c#.net windows 窗体应用程序。我必须将数据从另一个表导入到一个表中,但是两个表之间的映射在 xml 配置文件中,它是动态的,将来可能会被用户更改。每张表有100多个字段,如何通过动态映射导入数据。

其实我的xml是这样的

<Mapper MapID="3" Name="thridMappingDoc" SrcDB="OPTICS_SQL" gtDB="TargetSAMPLE">
    <Source>
        <OPTICS_SQL.OrderHDR Spk="" Sfk="" SfkRelation="" />
    </Source>
    <Target>
        <TargetSAMPLE.Sales WhereClause="">
            <TargetSAMPLE.Sales.SaleID Src="OPTICS_SQL.OrderHDR.OrderID" Tpk="Tfk="" TfkRelation="" ConstantValue="" Formula="" AlternateValue="" />
            <TargetSAMPLE.Sales.SaleDate Src="OPTICS_SQL.OrderHDR.OrderDate" Tpk="" Tfk="" TfkRelation="" ConstantValue="" Formula="" AlternateValue="" />
        </TargetSAMPLE.Sales>
    </Target>
</Mapper>

第二个xml文件

假设我们有两个xml文件,一个定义了源连接字符串,目标连接字符串,另一个xml定义了srcdb和trgt db之间的映射。

1- 我必须读取源连接和目标连接。根据配置 xml 文件建立连接。 注意:- 你也可以在 Consetting xml 文件中定义你的连接字符串

2- 我必须读取第二个映射器 xml 文件,根据源连接和目标连接首先找到 src db 和 targetdb 中附加的表。 ex.- OrderHDR 表列 OrderId - 101,102,103 请先在sql中手动插入。

3- 检查第二个映射器 xml 文件中给出的条件

注意:这意味着 OrderHDR 表字段 OrderID 分配给 targetdb “TargetSample”,表名“Sales”,列名“SalesID” 注意:这里 OPTICS_SQL 是源连接字符串名称

4- 将您从 src db 读取的所有值插入 OrderID 到 targetdb 销售表列 salesId。
请在下面找到附件。并首先查看这些 xml 文件,我还附上了 sql脚本。

【问题讨论】:

  • 你的问题是什么?
  • 一个你正在使用的例子会有帮助。
  • 我已经正确描述了问题..请帮忙。

标签: c# sql-server xml


【解决方案1】:

您可以简单地使用从 xmlfile 解析的列名和值动态地创建插入语句:

XmlDocument doc = new XmlDocument();
doc.Load("xmlfile1.xml");

string databasename = doc.DocumentElement.Name;

foreach (XmlNode node in doc.SelectNodes("/" + databasename + "/*[starts-with(name(), 'SourceTableName')]"))
{
    string tablename = node.Attributes["targetTable"].Value;
    string Columns = "";
    string Values = "";

    foreach (XmlNode field in node.SelectNodes("Field"))
    {
        Columns += (!string.IsNullOrEmpty(Columns) ? ", " : "") + field.Attributes["targetField"].Value;
        Values += (!string.IsNullOrEmpty(Values) ? ", " : "") + "'" + field.InnerText + "'";
    }

    //Generate insert statement
    string statement = string.Format("Insert Into {0}.{1} ({2}) Values ({3})",
                                    databasename,
                                    tablename,
                                    Columns,
                                    Values);

    Console.WriteLine(statement);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2021-02-10
    • 2014-11-22
    • 2021-08-18
    相关资源
    最近更新 更多