【问题标题】:Replacing XML with DATABASE in .NET在 .NET 中用 DATABASE 替换 XML
【发布时间】:2012-11-17 22:37:36
【问题描述】:

我编写了一个使用 SQL SERVER 数据库的 ASP.NET 应用程序。在修改数据库期间,一位经验丰富的 .NET+DBMS 专家表示,关联/映射多个表的问题之一可以通过 .NET XML 字符串优雅地解决。我从来没有听说过这种技术,但不要听起来对这种“黑客”一无所知,我不能问他。有没有办法像常规数据库表一样插入/更新/删除 XML 字符串(不使用 Linq to XML)?

【问题讨论】:

  • 我认为它们只是意味着将 XML 存储在数据库中(在文本列中),而不是试图将所有数据规范化到其他表中。这是一种有时可行的方法,但坦率地说,我通常最终只是希望我已经对数据进行了规范化。
  • 我不知道他是什么意思,但是当他说在会议中使用 XML 字符串而不是这么多表时,我惊呆了。当我提出架构@MikeChristensen时,他不止一次说过
  • 老实说,这是您应该与他进行的讨论。吞下你的骄傲,问问他的意思,让他带你看一个简单的例子。开发者不是无所不知的,我们不可能无所不知。
  • 这绝对是一种方法。如果您总是需要一次加载所有数据,这比执行一堆 JOIN 更快。缺点是您无法真正查询该数据(尽管某些 RDBS 具有特殊的 XML 列类型并支持数据中的 XPath 查询),并且如果您需要升级/更改内容,这可能会非常痛苦。
  • @Shah 我同意,但下一次会议将在一周后,因为他正在国外旅行 + 他是那些客户端专家之一。所以,我别无选择,只能在这里问。我问过团队中的每个人是否理解他的意思。我别无选择,只能询问堆栈溢出。

标签: asp.net .net sql xml


【解决方案1】:

如果不是Linq to XML,那么他的意思可能是XML Columns。 SQL Server 2005 及更高版本允许您在表中定义XML Columns。因此,您可以在表中的字段中包含实际的 XML,然后您可以对它们执行 XQuery 操作。

我不知道您的上下文是什么以及问题陈述是什么,所以我无法告诉您这是一个好主意还是坏主意。它有其用途,在某些情况下可能有用,但不能以广泛、可扩展的方式使用。这真的取决于你将使用它。

【讨论】:

  • 我已经看到很多不值得+1 的第一个答案。
【解决方案2】:

我不确定他的意思,但可以将serialize 您的对象传递给XML,并将XML 作为参数传递给Stored Procedure

DECLARE @PersonJobsXML XML

SELECT  @PersonJobsXML = '<PersonJobs> 
<PersonId>24234</PersonId> 
<Job>
        <JobTitle>Engineer I</JobTitle>
        <CompanyName>ACME</CompanyName>
</Job> 
<Job>
    <JobTitle>Engineer II</JobTitle>
    <CompanyName>World Inc.</CompanyName>
</Job> 
<Job>
    <JobTitle>Engineer II</JobTitle>
    <CompanyName>Tek Corp</CompanyName>
</Job> 
</PersonJobs>'


SELECT  PersonJobs.Job.value('../PersonId[1]', 'INT') AS PersonId
      , PersonJobs.Job.value('JobTitle[1]', 'VARCHAR(200)') AS JobTitle
      , PersonJobs.Job.value('CompanyName[1]', 'VARCHAR(200)') AS CompanyName
FROM    @PersonJobsXML.nodes('//PersonJobs/Job') AS PersonJobs ( Job )

这使您只需一次调用即可将对象列表传递给数据库;缺点是尺寸可能非常有限

但如果您使用的是 SQL Server 2008,您应该查看 Table-Valued Parameters:查看 Table Value Parameters in SQL Server 2008 and .NET (C#)

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    相关资源
    最近更新 更多