我有一个 myClass 的集合。我想使用 XML 将它发送到 sp。我不知道如何将集合转换为 xml。 将集合转换为xml后,我想将其发送到存储过程进行批量插入
请帮忙
最佳答案
您可以使用 XmlSerializer 将类序列化为 XML,然后将该 XML 值传递到存储过程,然后在存储过程中循环访问节点。除了 XML 之外,传递多行数据的另一种选择是使用 Table-Valued Parameters。 .
XML 方法看起来像这样:
MyClass myClass = new MyClass();
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
XmlWriterSettings settings = new XmlWriterSettings()
{
Encoding = new UnicodeEncoding(false, false)
};
StringBuilder xml = new StringBuilder();
using (XmlWriter xw = XmlWriter.Create(xml, settings))
{
serializer.Serialize(xw, myClass);
}
...
SqlCommand cmd = new SqlCommand()
{
CommandText = "InsertMyClass",
CommandType = CommandType.StoredProcedure
};
SqlParameter sqlParam = new SqlParameter()
{
ParameterName = "@x",
SqlDbType = SqlDbType.Xml,
Value = xml.ToString()
};
cmd.Parameters.Add(sqlParam);
int count = cmd.ExecuteNonQuery();
为了举例,假设您的 XML 如下所示:
<MyClass>
<Item>
<ID>1</ID>
<Property1>prop 1</Property1>
<Property2>prop 2</Property2>
</Item>
</MyClass>
然后存储过程可以进行插入:
CREATE PROCEDURE InsertMyClass
(
@x XML
)
AS
BEGIN
INSERT INTO table (ID, Prop1, Prop2)
SELECT
CAST(CAST(r.i.query('./ID/text()') AS VARCHAR(20)) AS INT) ,
CAST(r.i.query('./Property1/text()') AS VARCHAR(20)),
CAST(r.i.query('./Property2/text()') AS VARCHAR(20))
FROM
@x.nodes('/MyClass/Item') R(i)
END
关于c# - 将 XML 发送到 sp 以进行插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4654226/