我有一个XML架构,我知道“xsd.exe”可以为它生成C#代码。但我想知道是否可以借助此工具或其他工具从XSD自动创建MS SQL Server 2005+表。
BTW 我没有得到“xsd.exe”生成的C#代码的价值。
CodeXS和xsd.exe生成的代码有什么区别?
答案 0 :(得分:5)
您可以使用XSD2DB实用程序
这是示例 xsd2db.exe -f true -l [服务器名称] -n [数据库名称] -s D:\ po.xsd -t sql
答案 1 :(得分: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 :(得分:2)
BTW我没有得到C#代码 由“xsd.exe”生成是值得的。
我假设你的意思是“我不明白生成的代码是如何有用的”
它生成的代码的目的是使用.NET中的Microsoft序列化子系统进行序列化。如果你创建一个新的XmlSerializer(typeof(GeneratedType)),你可以调用它上面的Serialize()和Deserialze()来进出Xml和对象。
在一个更复杂的代码生成器(如CodeXS)中,它变得更加容易,因为它们为您生成帮助:GeneratedType.FromXML(Stream / String)反序列化和myGeneratedType.Xml序列化。
这些生成的类允许您处理已发布的模式,并且完全相信生成的符合模式的任何XML都将使用这些类型进行解析和生成。您不需要做任何工作来从XML中获取数据(即没有XML DOM访问),您不需要考虑生成符合您的模式的XML。它只是工作:))
答案 3 :(得分:0)
只要您可以成功解析XML架构,您就应该能够创建适当的数据库脚本并执行它们来创建表格。
答案 4 :(得分: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());
}