从DataSet创建SQL Server数据库

时间:2015-06-01 11:34:33

标签: c# sql sql-server xml dataset

我在DataSet中读取了xsd和xml文件,现在我想从此DataSet

创建db
foreach (DataTable dt in temp.Tables) {
    foreach (DataColumn dc in dt.Columns) {
        //example for one column
        SqlCommand createtable = new SqlCommand(
            "create table " + dt.TableName + " (" 
            + dc.ColumnName + "  varchar(max))", conn);
        createtable.ExecuteNonQuery();
    }
}

但是我有一些问题,当我创建db表时,我需要XSD中的列类型和大小(例如使用varchar(max))。如何解决这个问题?

例如在xsd中我有

<xs:restriction base="xs:string">
<xs:maxLength value="36"/>
<xs:minLength value="1"/>
</xs:restriction>

<xs:restriction base="xs:string">
<xs:maxLength value="40"/>
</xs:restriction>

<xs:restriction base="xs:decimal">
<xs:totalDigits value="19"/>
<xs:fractionDigits value="2"/>
</xs:restriction>

最后我需要脚本来创建列大小的数据库表(如xsd)

UPD:也许使用XmlSchemaSet来解析XSD?

3 个答案:

答案 0 :(得分:5)

使用XSD2DB

XSD2DB是一个用C#编写的命令行工具,它将读取Microsoft ADO.NET compatible DataSet Schema File (XSD)并生成数据库。

link

答案 1 :(得分:2)

我想这没有一般解决方案。 XSD可以很容易地描述一些不会映射到关系数据库的内容。虽然您可以尝试“自动化”这一点,但您的XSD必须考虑到关系数据库,否则效果不佳。

但是,您可以使用SQLServer Management ObjectsSqlBulkCopy将内存中的数据表传输到sql server数据库。

有关详细信息,请参阅this链接。希望这可以帮到你。

答案 2 :(得分:2)

脚手架能否在这种情况下帮助你?

也许看一下,我知道有一种方法可以先用脚手架对数据库进行反向编译