首页 > 解决方案 > 如何在 XMl 和 SQL Server 中处理撇号 (')

问题描述

我有一个包含员工详细信息的 XML 文件,我试图弄清楚的问题是这些 XML 值'在整个 XML 内容的随机位置都有撇号 (),因此很难将它们插入到 SQL Server 表中。

我会将整个 XML 内容从 MVC C# 发送到 SQL Server 存储过程,该存储过程会将数据插入到各种表中,但只要'XML 内容中有撇号 (),就会发生错误。所以这些撇号应该被处理或替换或删除。我怎样才能做到这一点?

这是一些示例 XML 内容:

<xml>
    <Channel>
        <Program id="1" category="A">
            <name>Pra'Matino</name>
            <Bin>
                <Date>1/1/2020</Date>
                <Date>1/1/2020</Date>
            </Bin>
            <Player>
                <Pla>S'Rajesh</Pla>
                <Pla>Su'man</Pla>
            </Player>
            <Television>
                <HostDeails>2/9/2020</HostDeails>
                <HostDeails>MALE</HostDeails>
                <HostDeails>Colour</HostDeails>
            </Television>
            <addresses>
                <address>
                    <address1>No 10</address1>
                    <city>Chennai</city>
                    <country>IN's</country>
                    <ProductName>Lavender's</ProductName>
                </address>
                <address>
                    <address1>N0 72</address1>
                    <city>Sanagoor Road</city>
                    <postalCode>641006</postalCode>
                </address>
                <address>
                    <address1>Old No 10/ New No 3</address1>
                    <city>Madurai</city>
                    <country>IN</country>
                    <ProductName>Lavender</ProductName>
                </address>
                <address>
                    <address1>N0 98</address1>
                    <city>BridhSanagoor Road</city>
                    <country>SriLanka</country>
                    <postalCode>641006</postalCode>
                </address>
            </addresses>
        </Program>
        <Program id="25" category="B">
            <name>Rahman'G</name>
            <Bin>
                <Date>10/1/2020</Date>
                <Date>1/12/1989</Date>
            </Bin>
            <Player>
                <Pla>Paul'D</Pla>
                <Pla>Right'F</Pla>
            </Player>
            <Television>
                <HostDeails>5/7/2021</HostDeails>
                <HostDeails>MALE</HostDeails>
                <HostDeails>C'olour</HostDeails>
            </Television>
            <addresses>
                <address>
                    <address1>S7</address1>
                    <city>Coimbatire</city>
                    <country>IN</country>
                    <ProductName>Lavender</ProductName>
                </address>
                <address>
                    <address1>Sai Akshya Appartment</address1>
                    <city>Sanagoor Road</city>
                    <postalCode>631009</postalCode>
                </address>
                <address>
                    <address1> No 3</address1>
                    <city>Thenkaasi</city>
                    <ProductName>Lavender</ProductName>
                </address>
                <address>
                    <address1>N0 98</address1>
                    <city>Bridh'Sanagoor Road</city>
                    <country>SriLanka</country>
                    <postalCode>641006</postalCode>
                </address>
            </addresses>
        </Program>
    </Channel>
</xml>

谢谢你们。

从评论中复制:
我这样做

SqlCommand.Parameters.Add("@XMLValue", SqlDbType.Xml).Value = xmlDetails.ToString();

标签: sql-serverxml

解决方案


如果您使用参数化查询(看一看SqlParameters),您将不会遇到这些问题。

SqlCommand cmd = new SqlCommand(query, connection);
SqlParameter param  = new SqlParameter();
param.ParameterName = "@ParamName";
param.Value         = valueVariable;

尽量不要使用字符串连接,并注意风险和影响。

编辑:

xmlDetails.ToString()不要将 xmlDetails 转换为字符串。而是解析它

SqlXml newXml = new SqlXml(new XmlTextReader("MyTestStoreData.xml")); 

SqlXml newXml = new SqlXml(xmlDetails); <-- xmlDetails is needed to be either Stream or XmlReader type

推荐阅读