我正在尝试将.xml数据插入到Sql Server数据库中。
硬编码作品 - >
string strSQL = @"
DECLARE @input XML = '<Mitarbeiter><Mitarbeiter><ID>6000</ID><Vorname>Ulli</Vorname><Nachname>Unfassbar</Nachname><Gehalt>2000</Gehalt></Mitarbeiter></Mitarbeiter>'
INSERT INTO Mitarbeiter(ID, Vorname, Nachname, Gehalt)
SELECT
XEmp.value('(ID)[1]', 'int'),
XEmp.value('(Vorname)[1]', 'varchar(50)'),
XEmp.value('(Nachname)[1]', 'varchar(50)'),
XEmp.value('(Gehalt)[1]', 'int')
FROM
@input.nodes('/Mitarbeiter/Mitarbeiter') AS XTbl(XEmp)";
...但这应该适用于.xml文件。我试图添加文件路径,但没有成功。这是我添加文件路径的方式。
string strSQL = @"
DECLARE @input XML
SELECT @xml = XTbl.XEmp
FROM OPENROWSET( BULK 'C:\TestMail.xml', SINGLE_CLOB ) XTbl(XEmp)
INSERT INTO Mitarbeiter(ID, Vorname, Nachname, Gehalt)
SELECT
XEmp.value('(ID)[1]', 'int'),
XEmp.value('(Vorname)[1]', 'varchar(50)'),
XEmp.value('(Nachname)[1]', 'varchar(50)'),
XEmp.value('(Gehalt)[1]', 'int')
FROM
@input.nodes('/Mitarbeiter/Mitarbeiter') AS XTbl(XEmp)";
有什么想法吗? 感谢您提前提供任何帮助!
答案 0 :(得分:1)
修复变量名后,它可以在我的服务器上运行:
DECLARE @input XML
SELECT @input = XTbl.XEmp
FROM OPENROWSET(BULK 'C:\Testmail.xml', SINGLE_CLOB) XTbl(XEmp);
INSERT INTO Mitarbeiter (ID, Vorname, Nachname, Gehalt)
SELECT XEmp.value('(ID)[1]', 'int'), XEmp.value('(Vorname)[1]', 'varchar(50)'), XEmp.value('(Nachname)[1]', 'varchar(50)'), XEmp.value('(Gehalt)[1]', 'int')
FROM @input.nodes('/Mitarbeiter/Mitarbeiter') AS XTbl(XEmp);
答案 1 :(得分:1)
这里的标准方法是:
我建议使用存储过程,因为你的内联sql方法是一种不好的做法,容易受到sql注入攻击,并且很难进行故障排除和维护。
我建议从这里开始学习序列化/反序列化: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer(v=vs.110).aspx
此外,如果您拥有XML的XSD,则可以快速创建与xml匹配的类(参考:What is the difference between XML and XSD?)。我认为您的XSD看起来像这样:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Mitarbeiter">
<xs:complexType>
<xs:sequence>
<xs:element name="Mitarbeiter">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:short" name="ID"/>
<xs:element type="xs:string" name="Vorname"/>
<xs:element type="xs:string" name="Nachname"/>
<xs:element type="xs:short" name="Gehalt"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
将上述xsd保存为.xsd文件。打开Visual Studio命令提示符并输入以下命令:
xsd your.xsd /classes
这将为您创建一个类并节省大量的输入。使用xml通过对xml文件进行解除封装来填充您的类(参考上面的msdn文章)。填充类后,在类中创建一个save方法,该方法通过存储过程插入到数据库中。参考这个: