C# 将XML发送到sp以进行插入
我有一个我的班级的集合。我想使用XML将其发送到sp。我不知道如何将集合转换为xml。 将集合转换为xml后,我希望将其发送到存储过程以进行大容量插入 请提供帮助您可以使用从序列化类到xml。您可以通过使用属性在某种程度上控制序列化模式-有关更多信息,请参阅MSDN链接 在Sql Server端,可以使用OPENXML将xml文档转换为行集,以便插入到表中。有关OpenXml的信息,请参阅和-这两个链接都包含应该让您开始学习的示例 最后,这是可能的,但通常会从文件中插入数据,我怀疑它是否适合您的场景。您可以使用从序列化类到xml。您可以通过使用属性在某种程度上控制序列化模式-有关更多信息,请参阅MSDN链接 在Sql Server端,可以使用OPENXML将xml文档转换为行集,以便插入到表中。有关OpenXml的信息,请参阅和-这两个链接都包含应该让您开始学习的示例C# 将XML发送到sp以进行插入,c#,sql-server,xml,stored-procedures,C#,Sql Server,Xml,Stored Procedures,我有一个我的班级的集合。我想使用XML将其发送到sp。我不知道如何将集合转换为xml。 将集合转换为xml后,我希望将其发送到存储过程以进行大容量插入 请提供帮助您可以使用从序列化类到xml。您可以通过使用属性在某种程度上控制序列化模式-有关更多信息,请参阅MSDN链接 在Sql Server端,可以使用OPENXML将xml文档转换为行集,以便插入到表中。有关OpenXml的信息,请参阅和-这两个链接都包含应该让您开始学习的示例 最后,这是可能的,但通常会从文件中插入数据,我怀疑它是否适合您的
最后,这是可能的,但通常会从文件中插入数据,我怀疑它是否适合您的场景。您可以使用XmlSerializer将类序列化为XML,然后将该XML值传递到存储过程中,然后在存储过程中迭代节点。除了XML之外,传递多行数据的另一个选项是使用 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();
<MyClass>
<Item>
<ID>1</ID>
<Property1>prop 1</Property1>
<Property2>prop 2</Property2>
</Item>
</MyClass>
作为示例,假设您的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();
<MyClass>
<Item>
<ID>1</ID>
<Property1>prop 1</Property1>
<Property2>prop 2</Property2>
</Item>
</MyClass>
可以使用XmlSerializer将类序列化为XML,然后将该XML值传递到存储过程中,然后在存储过程中遍历节点。除了XML之外,传递多行数据的另一个选项是使用 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();
<MyClass>
<Item>
<ID>1</ID>
<Property1>prop 1</Property1>
<Property2>prop 2</Property2>
</Item>
</MyClass>
作为示例,假设您的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();
<MyClass>
<Item>
<ID>1</ID>
<Property1>prop 1</Property1>
<Property2>prop 2</Property2>
</Item>
</MyClass>
您处理XML仅仅是因为您想通过调用一个存储过程来处理集合中的所有项吗?您处理XML仅仅是因为您想通过调用一个存储过程来处理集合中的所有项吗?OPENXML是SQL Server 2000中分解XML的方法,但在2005年及以后,XML方法尤其是.nodes更受欢迎。@RBarryYoung,注意!虽然我不是Sql专家,但有人告诉我OPENXML在海量数据中更好,因此我提出了这个建议。在谷歌上快速搜索会产生不同的意见——如果你/其他人能遮住一些光线,我会很高兴的。一个链接说,这样的文件或性能分析将更加有利!好吧,性能是相似的,但是XML方法更加灵活和有能力。我看到了性能相似的性能比较,现在找不到链接。我认为问题在于内存使用和可伸缩性:节点和值函数的组合有效地使用XML索引。因此,这种组合比OpenXml具有更大的可伸缩性。OPENXML是在SQL Server 2000中分解XML的方法,但是在2005年及以后,XML方法尤其受欢迎。节点更受欢迎。@RBarryYoung,point注意到!虽然我不是Sql专家,但有人告诉我OPENXML在海量数据中更好,因此我提出了这个建议。在谷歌上快速搜索会产生不同的意见——如果你/其他人能遮住一些光线,我会很高兴的。一个链接说,这样的文件或性能分析将更加有利!好吧,性能是相似的,但是XML方法更加灵活和有能力。我看到了性能相似的性能比较,现在找不到链接。我认为问题在于内存使用和可伸缩性:节点和值函数的组合有效地使用XML索引。因此,这种组合比OpenXml具有更大的可伸缩性。啊!这不需要使用光标…:-@是的,我说可能有更好的方法。如果你愿意,也许你可以发布一个更好的答案,或者提供一个链接,甚至可以编辑我的答案?也许只有我,但没有光标似乎更容易-@RBARYYOUNG:我同意——看起来好多了!啊!这不需要使用光标…:-@是的,我说可能有更好的方法。如果你愿意,也许你可以发布一个更好的答案,或者提供一个链接,甚至可以编辑我的答案?也许只有我,但没有光标似乎更容易-@RBARYYOUNG:我同意——看起来好多了!