【问题标题】:Insert XmlDocument representing FOR XML result in to database将表示 FOR XML 结果的 XmlDocument 插入数据库
【发布时间】:2016-02-16 16:10:31
【问题描述】:

下面的代码从表格中提取数据并为您提供一个 XmlDocument 来使用:

using (SqlCommand command = CreateCommand())
{
    command.CommandType = CommandType.Text;
    command.CommandText = "SELECT * FROM SOME_TABLE FOR XML AUTO, ELEMENTS, ROOT('SomeEntities')";

    var xmlReader = command.ExecuteXmlReader();
    var xmlDoc = new XmlDocument();

    xmlDoc.Load(xmlReader);
}

为您提供这样的数据的 XML 表示,例如:

<SomeEntities>
    <Entity>
        <SomeKey>123<SomeKey/>
        <SomeValue>TestString<SomeValue/>
    <Entity/>
<SomeEntities/>

这很好,但是有没有办法对同一整行采用相同的 XML 表示,并将其重新插入到数据库中?

MSDNFOR XML 将与INSERT 一起使用,但没有给出示例,也许我使用了错误的搜索词,但似乎没有太多关于这方面的内容。这似乎是您可以做到的,对吧?

有什么想法吗?很高兴提供更多代码或尝试想法,请发表评论:)

【问题讨论】:

  • 我理解正确吗?您确实不想将 XML 存储到数据库中,而是将 XML 的数据存储回数据库中的结构化表中,对吗?
  • 需要插入客户端生成的XML(上传)还是插入其他sql语句生成的XML(select..for xml)?
  • 没错! XML 表示来自数据库的结果集。我会在问题中添加一些 XML 来说明这一点。
  • 试试这里显示的方法:stackoverflow.com/questions/21378729/…,虽然它不使用 XML FOR。
  • 数据是由 XML FOR 查询在我打算插入的同一张表上生成的。 @Khale_Kitha 我见过各种类似的想法,但我认为必须有一种比定义所有列和数据类型更通用的方法来做到这一点?

标签: c# sql-server xml xmldocument


【解决方案1】:

没有自动的方法来实现这一点。事实上,XML 是非常 通用的,并且可以以几乎任何结构和嵌套方式携带几乎任何类型的数据。一个工具应该如何自动知道该做什么?

一些建议

1) 您可以创建一个模式 (XSD) 并从中创建一个 DataSet。使用结构合适的 DataSet,很容易用您的 XML“填充”它,然后使用 DataSet 的功能。

2) 创建一个存储过程,将您的 XML 作为传入参数。该 SP 会读取数据并正确插入。

3) 用 C# 编写一些代码来实现你想要的。

【讨论】:

  • 谢谢@Shnugo!所有好主意,我开始用 C# 开发解决方案。我不期望工具会这样做。更有可能的是,XML FOR、ELEMENTS 或 XmlWriter 或其他东西可能会通过一些记录不充分且晦涩难懂的方式使这项工作反过来。
  • @GP24,如果您喜欢我的回答,那么投票将非常友好。投票是 SO 运行的燃料。而且我沉迷于代表点:-)
  • 你去我的朋友 :) 再次感谢您的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2012-04-13
相关资源
最近更新 更多