如何从SQL表的列中获取XML数据?

26 浏览
0 Comments

如何从SQL表的列中获取XML数据?

我在SQL中有一张表,其中的一列是XML 数据类型。我该如何从 SQL 获取其值到 ASP.NET (C#) 代码后端?我希望将其存储为 Xml 类型,而不是字符串类型,因为我需要操纵其中的值和属性。我尝试将其获取并放入字符串类型变量中,结果得到了类似于 AAYYYNYNYNStarLight 的东西,我希望得到的是:

A
A
Y
Y
Y
N
Y
N
Y
N
StarLight

我该如何做才能操纵每个节点呢?我对 XML 一窍不通,任何帮助都将不胜感激。:)

编辑:清理了 XML

admin 更改状态以发布 2023年5月23日
0
0 Comments

如果你在C#代码中进行这样的操作,你肯定能够正确地从数据库读取XML:

// setup connection string and query statement
string connStr = "server=(local);database=Test;integrated security=SSPI;";
string query = "SELECT XmlContent FROM dbo.XmlTest2 WHERE ID = @ID";
// wrap your SqlConnection and SqlCommand in using blocks...
using(SqlConnection _con = new SqlConnection(connStr))
using(SqlCommand _cmd = new SqlCommand(query, _con))
{
   // setup parameter for _cmd
   _cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 1;
   _con.Open();
   string contentsOfYourXml = (string)_cmd.ExecuteScalar();
   _con.Close();
}

然而,一旦你把这个字符串放到ASP.NET页面中,ASP.NET运行时将尝试进行XSL转换,默认情况下,如果你没有指定任何内容,XSLT将简单地返回所有元素值 -- 这就是你看到的字符串。

但是从数据库中读取肯定是完全正常的!一旦你有了包含所有XML的字符串,你可以随意使用它 - 使用Linq-to-XML或者其他方式进行操作。

0
0 Comments

我假设您正在使用纯粹的ADO.NET从SQL Server中获取数据,而不是像Entity Framework这样的ORM。如果我正确地阅读了这里的文档,XML列将暴露为可以使用XmlReader检索的类型,可以使用GetSqlXml方法。

一旦您拥有XmlReader,您可以使用Load方法将其直接加载到XDocument中。

您可能还感兴趣的另一件事是,有两个不同的XML命名空间,请查看关于XDocument和XmlDocument之间的区别的这个问题。

0