如何从XML模式创建SQL Server表模式? (与.NET和Visual Studio 2008一起使用)

问题描述 投票:3回答:5

我有一个XML模式,并且我知道“ xsd.exe”可以为其生成C#代码。但是我想知道是否有可能借助此工具或其他工具从XSD自动创建MS SQL Server 2005+表。

顺便说一句[[我不明白“ xsd.exe”生成的C#代码值得什么。CodeXS和xsd.exe生成的代码有什么区别?

c# .net sql-server xml sql-server-2005
5个回答
4
投票
您可以使用XSD2DB实用程序

这是示例xsd2db.exe -f true -l [服务器名称] -n [数据库名称] -s D:\ po.xsd -t sql

帮助链接http://xsd2db.sourceforge.net/


2
投票
免责声明:我自己还没有做过,但是前几天,当我考虑要这样做时,我为这些链接添加了书签。这个人的T-SQL通常很出色,所以我强烈推荐它:

http://weblogs.sqlteam.com/peterl/archive/2009/03/05/Extract-XML-structure-automatically.aspx

http://weblogs.sqlteam.com/peterl/archive/2009/06/04/Extract-XML-structure-automatically-part-2.aspx


2
投票
顺便说一句,我没有得到什么C#代码由“ xsd.exe”生成的文件值得。

我假设您的意思是“我不明白所生成的代码如何有用”

生成代码的目的是使用.NET中的Microsoft序列化子系统进行序列化。如果创建一个新的XmlSerializer(typeof(GeneratedType)),则可以在其上调用Serialize()和Deserialze()以进出Xml和对象。

在更复杂的代码生成器中,例如CodeXS,变得更加容易,因为它们为您生成了帮助程序:GeneratedType.FromXML(Stream / String)进行反序列化,而myGeneratedType.Xml进行序列化。

这些生成的类使您能够处理已发布的架构,并完全确信所生成的符合该架构的任何XML都将使用这些类型进行解析和生成。您不需要做任何工作就可以从XML中获取数据(即,没有XML DOM访问权限),也不需要三思而后行地生成符合您的模式的XML。就是这样:)


0
投票
只要您可以成功解析XML模式,您就应该能够创建适当的数据库脚本并执行它们以创建表。

0
投票
我知道这是一个古老的话题,但是知道如何完成对我确实很有帮助。也许对其他人有帮助。

More advanced examples can be seen at Microsoft page.

因此,可以从XSD手动创建SQL表。例如,我们有以下xml:

<?xml version="1.0" encoding="UTF-8"?> <foo> <row> <CAR_NUM>624</CAR_NUM> <CAR_ORDER>1</CAR_ORDER> </row> <row> <CAR_NUM>623</CAR_NUM> <CAR_ORDER>2</CAR_ORDER> </row> <row> <CAR_NUM>681</CAR_NUM> <CAR_ORDER>3</CAR_ORDER> </row> <row> <CAR_NUM>625</CAR_NUM> <CAR_ORDER>4</CAR_ORDER> </row> <row> <CAR_NUM>680</CAR_NUM> <CAR_ORDER>5</CAR_ORDER> </row> </foo>

所以XSD看起来像这样:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:element name="row" sql:relation="CAR" sql:key-fields="CAR_NUM"> <xsd:complexType> <xsd:sequence> <xsd:element name="CAR_NUM" type="xsd:integer" /> <xsd:element name="CAR_ORDER" type="xsd:integer" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>

并且SQL表将如下所示:

CREATE TABLE CAR ( CAR_NUM INT , CAR_ORDER INT GO

然后您可以使用Interop.SQLXMLBULKLOADLib库将数据加载到SQLServer:

try { var xmlFileName = @".your address here..\GetInformReplyEdited.xml"; var xsdScheme = @".your address here..\scheme.xsd"; var connString = "Provider=sqloledb;server=yourServer;database=Test;integrated security=SSPI"; SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class objBL = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class { ConnectionString = connString, ErrorLogFile = "error.xml", KeepIdentity = false }; objBL.Execute(xsdScheme, xmlFileName); } catch (Exception e) { Console.WriteLine(e.ToString()); }

© www.soinside.com 2019 - 2024. All rights reserved.