【问题标题】:Insert XML data SQL Server - Encoding issue插入 XML 数据 SQL Server - 编码问题
【发布时间】:2011-09-29 10:10:10
【问题描述】:

我在将一些数据插入数据库之前对其进行序列化。

Dim insertString As String = "INSERT INTO GP_SELECTION(SOCIETE, NAME, OBJECT_TYPE, DATA) VALUES ('{0}','{1}',{2},'{3}')"
Dim xmlData As String = .XmlFromFilters()
insertString = String.Format(insertString, societe, .Name, CInt(.ObjectType), xmlData)

现在,当我进行插入时,sql 就像

INSERT INTO GP_SELECTION(SOCIETE, NAME, OBJECT_TYPE, DATA) VALUES ('01','hello world!!!',0,
'<?xml version="1.0" encoding="utf-16"?>
<ArrayOfPropertyFilter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PropertyFilter>
    <AndOr>SOME DATA</AndOr>
    <Value xsi:type="xsd:string" />
  </PropertyFilter>
</ArrayOfPropertyFilter>')

SQl 服务器给了我:

XML解析:第1行,第38个字符,无法切换编码

我想知道如何避免它...我应该转换 Unicode(UTF) insertString 吗?如何?或者我应该使用 SQL 方法进行转换?

也许解决方案是从序列化字符串中删除“encoding="utf-16"”(然后插入没有问题)...?

PS.为了防止出现异常的cmets,其实我没有使用存储过程,而是直接使用INSERT代码。我承认这不是最好的方法,但这是我目前的选择。

【问题讨论】:

  • 抱歉 - 我的近距离投票是不必要的 - 你的问题与我的问题有点不同.....
  • SQL Server 版本是多少?

标签: .net sql-server xml encoding


【解决方案1】:

我不知道为什么这会有所不同 :-) 但是如果您将 XML 转换为 NVARCHAR(MAX) 然后返回到 XML 它似乎可以工作(至少在我的测试用例中):

DECLARE @tmp TABLE (ID INT, XmlCol XML)

INSERT INTO @tmp 
VALUES (1, CAST(CAST('<?xml version="1.0" encoding="utf-16"?>
                      <ArrayOfPropertyFilter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                         <PropertyFilter>
                              <AndOr>SOME DATA</AndOr>
                              <Value xsi:type="xsd:string" />
                         </PropertyFilter>
                      </ArrayOfPropertyFilter>' AS NVARCHAR(MAX)) AS XML))

然而,您的更大问题是您的方法对 SQL 注入开放 - 您应该使用 参数化查询 而不是将您的 SQL 语句作为字符串连接在一起!

使用类似的东西:

INSERT INTO GP_SELECTION(SOCIETE, NAME, OBJECT_TYPE, DATA) 
VALUES (@Societe, @Name, @ObjectType, @Data)

然后为您的查询定义 SQL 参数并用值填充这些参数。更安全!!

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多