【问题标题】:T-SQL to XML to C# Back to SQLT-SQL 到 XML 到 C# 返回 SQL
【发布时间】:2016-09-25 13:48:20
【问题描述】:

我对 SQL Server、C# 等非常陌生。但我每天都在学习,这很有趣!

我需要从 SQL Server 的 2 个不同数据库中的 2 个表中获取信息。将其转换为.xml 文件,在 C# 中对其进行冒泡排序并将其传输回 SQL Server 中的第三个数据库。

我已经编写了将表格转换为 xml 文件的代码,我的问题是我是否可以将它们变成一个 .xml 文件。

我学到的代码为每个表创建一个,因此来自 2 个数据库的 2 个表给了我 4 个 .xml 文件。

SELECT * 
FROM [Database1].[dbo].[Table_1]
ORDER BY NEWID()
FOR XML AUTO

SELECT *
FROM [Database1].[dbo].[Table_2]
ORDER BY NEWID()
FOR XML AUTO

SELECT *
FROM [Database2].[dbo].[Table_1]
FOR XML AUTO

SELECT *
FROM [Database2].[dbo].[Table_2]
FOR XML AUTO

在它变成一个 xml 文件后,我必须把它放在 C# 中并冒泡排序到 SQL Server 中的第三个数据库中,正如你所看到的,我至少可以获取我想要的数据,但是当涉及到 C# 和冒泡时排序它我完全迷路了。我已经用谷歌搜索了,但我无法理解,所以我希望你们可以尝试用更简单的方式解释。

【问题讨论】:

  • 嗨,Marik,欢迎来到 SO。请给我一个提示:您在这里有两个问题:将一个问题放在一个问题中是SO的一个原则。这使关注用户更容易找到问题的答案。

标签: c# sql-server xml


【解决方案1】:

您的问题之一是:如何将 4 个 XML 结果合二为一:

这是 4 个不同的调用,两个针对当前 Db,两个针对另一个 Db:

SELECT TOP 3 * 
FROM INFORMATION_SCHEMA.TABLES
FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('CurrentDb')

SELECT TOP 3 * 
FROM INFORMATION_SCHEMA.COLUMNS
FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('CurrentDb')

SELECT TOP 3 * 
FROM OtherDb.INFORMATION_SCHEMA.TABLES
FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('OtherDb')

SELECT TOP 3 * 
FROM OtherDb.INFORMATION_SCHEMA.COLUMNS
FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('OtherDb')

要将相同的内容合二为一,您只需将其包装在外部选择中即可。并注意,TYPE...

一些解释:如果你写SELECT * FROM xyz FOR XML RAW,你会得到一个XML。这是一个完整而复杂的结构,但仍然是一个标量值。

SELECT (SELECT * FROM xyz FOR XML RAW) AS MyXML,'test' AS OtherColumn FROM SomeTable。您将获得您的 XML,但作为 转义 文本表示。您必须指定 ,TYPE 才能获得 真正的 XML

SELECT
(
    SELECT TOP 3 * 
    FROM INFORMATION_SCHEMA.TABLES
    FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('CurrentDb'),TYPE
)
,(
    SELECT TOP 3 * 
    FROM INFORMATION_SCHEMA.COLUMNS
    FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('CurrentDb'),TYPE
)
,(
    SELECT TOP 3 * 
    FROM OtherDb.INFORMATION_SCHEMA.TABLES
    FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('OtherDb'),TYPE
)
,(
    SELECT TOP 3 * 
    FROM OtherDb.INFORMATION_SCHEMA.COLUMNS
    FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('OtherDb'),TYPE
)
FOR XML RAW

【讨论】:

  • 你能解释一下升技吗?我进行了测试,它做了我想要的,但我不完全明白为什么它仍然有效。
  • @Marik,嗨,我添加了一些解释......现在清楚了吗?
【解决方案2】:

以下是接下来的步骤 1) 在 c# 中连接到 sql 数据库 (http://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C) 2) 在 c# 中执行 sql 查询 3) 将查询放入 DataTable。(https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter(v=vs.110).aspx)

【讨论】:

    猜你喜欢
    • 2016-01-07
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多