【问题标题】:storing data in a xml format file将数据存储在 xml 格式文件中
【发布时间】:2013-06-07 18:35:48
【问题描述】:

我正在尝试构建一个函数,该函数将从多个表中检索“一些”SQL 数据,并将其存储在 XML 格式的文件中。

如果我用 C# 来做,是不是很简单:-

  • SQL 语句,

  • 检索数据,

  • 将数据存储在字符串列表中,

  • 然后是 WriteXml(xmlFile,存储数据的变量)??

谁能给我举个例子吗?

我在看:-

C# 中的 WriteXml() 和 WriteXmlSchema() 函数

string xmlFile = Server.MapPath("Employees.xml");

ds.WriteXml(xmlFile, XmlWriteMode.WriteSchema);

另外,xmlSerialization 会是我需要看看的东西吗?

示例 SQL 查询。

SqlConnection Connection1 = new SqlConnection(DBConnect.SqlServerConnection);
        String strSQL1 = "SELECT xxx.MEMBERKEY, xxx.MEMBID, xyz.HPCODE, convert(varchar, OPFROMDT, 101) as OPFROMDT"
            + ", convert(varchar, OPTHRUDT, 101) as OPTHRUDT FROM [main].[dbo].[yyy] INNER JOIN [main].[dbo].[xxx] ON xxx.MEMBERKEY = yyy.MEMBERKEY "
            + "and opthrudt >= opfromdt INNER JOIN [main].[dbo].[xyz] ON yyy.HPCODEKEY = xyz.HPCODEKEY where MembID = @memID";


        SqlCommand command1 = new SqlCommand(strSQL1, Connection1);
        command1.Parameters.AddWithValue("@memID", memID);
        SqlDataReader Dr1;
        Connection1.Open();
        Dr1 = command1.ExecuteReader();

        while (Dr1.Read())
        {
            HPCODEs.Add((Dr1["HPCODE"].ToString()).TrimEnd());
            OPFROMDTs.Add((Dr1["OPFROMDT"].ToString()).TrimEnd());
            OPTHRUDTs.Add((Dr1["OPTHRUDT"].ToString()).TrimEnd());
        }
        Dr1.Close();

【问题讨论】:

    标签: asp.net sql xml


    【解决方案1】:

    有很多方法可以解决这个问题。

    首先,您可以投入一些时间并使用 SQL 内置的 XML 功能来直接查询和获取 XML 文档,然后您可以将其直接序列化为文件。一个非常基本的例子可以在here 找到。然后你会使用 DataReader 的 GetSqlXml 方法,像这样

    SqlDataReader r = cmd.ExecuteReader();
    SqlXml data = r.GetSqlXml(0);
    XmlReader xr = data.CreateReader();
    

    也许另一种选择是从 sql 数据阅读器读取到 DTO(数据传输对象)。这可能是行之有效的方法。然后,一旦您有了 DTO 的列表,您就可以使用 .NET 的序列化 (DataContractSerializer) 序列化为 XML。

    【讨论】:

    • 基本的“for xml auto”命令能否有效地处理多个表连接?
    • 击败了我,我不是 DBA :-) 但我的猜测是它的工作原理是一样的,只是增加了序列化的开销。查看您的执行计划并将其与没有 xml auto 的执行计划进行比较。
    【解决方案2】:

    我强烈建议您使用这样的工具:

    http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.80).aspx

    如果您尝试创建的 xml 输出有一个 xsd,这将为您生成 .net 类。

    无论哪种方式,将数据放入 POCO 样式类并序列化为 XML 都比尝试直接使用 XmlWriter 好得多。

    【讨论】:

    • 我以前从未使用过FOR XML。这将在 SQL 服务器上运行,而不是在运行 .Net 代码的地方。无论哪种方式,我肯定会没事的。我知道如果您使用 POCO/XmlSerializer,您可以非常灵活地构建 XML。
    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2010-10-20
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多