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

时间:2009-06-17 19:44:54

标签: c# .net sql-server xml sql-server-2005

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

BTW 我没有得到“xsd.exe”生成的C#代码的价值。 CodeXS和xsd.exe生成的代码有什么区别?

5 个答案:

答案 0 :(得分:5)

您可以使用XSD2DB实用程序

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

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

答案 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());
}