gpt4 book ai didi

c# - 将 XML 发送到 sp 以进行插入

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:10 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com