用.NET中的DATABASE替换XML

时间:2012-11-29 19:01:58

标签: asp.net .net sql xml

我编写了一个使用SQL SERVER数据库的ASP.NET应用程序。在修改数据库期间,.NET + DBMS的一位经验丰富的大师说,使用.NET XML字符串可以很好地解决关联/映射多个表的问题之一。我从来没有听说过这种技术,但是听不到对这种“黑客”的无知,我不能问他这件事。有没有办法像常规数据库表那样INSERT / UPDATE / DELETE XML字符串(不使用Linq到XML)?

2 个答案:

答案 0 :(得分:2)

如果它不是Linq to XML,那么他可能指的是XML Columns。从SQL Server 2005开始,您可以在表中定义XML Columns。因此,您可以在表中的字段中包含实际的XML,然后可以对它们执行XQuery操作。

我不知道你的背景是什么以及问题陈述是什么,所以我不能告诉你这是好主意还是坏主意。它有其用途,在某些情况下可能很有用,但不能以广泛的,可扩展的方式使用。这实际上取决于你将用它做什么。

答案 1 :(得分:0)

我不确定他的意思,但可以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 )

{{1}}

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

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