gpt4 book ai didi

.net - 将 XML 插入 SQL Server 时出现 XML 解析错误

转载 作者:行者123 更新时间:2023-12-02 23:54:17 25 4
gpt4 key购买 nike

我正在编写一个简单的 powershell 脚本,将 XML 文件从文件夹插入 SQL Server 2012。但是每次尝试插入 XML 时都会失败,并出现以下错误。在 Microsoft 文档中,他们正在插入 UTF-8 编码的 xml。当我手动将编码更改为“UTF-16”时,我能够插入 XML 数据。我需要做的是在不更改 UTF-8 编码的情况下插入 XML。谢谢。

错误:

Exception calling "ExecuteScalar" with "0" argument(s): "XML parsing: line 1, character 38, unable to switch the encoding"



线
$InsertedID = $sqlCommand.ExecuteScalar()

表定义:
CREATE TABLE TESTXML
(
ID INT IDENTITY(1,1) NOT NULL,
FileName VARCHAR(200),
InsertedDate DATETIME DEFAULT GETDATE(),
InsertedBy VARCHAR(100) DEFAULT 'PS',
XML XML,
BLOB VARBINARY(MAX)
)

要解析的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<order xmlns="http://XXXXX/xml/impex/XXX/2006-10-31" order-no="XXX">
XML Data......
</order>

Powershell脚本:
foreach($xmlfile in $xmlfiles){
[string]$xml = (Get-Content $xmlfile.FullName) -replace "'", "''"
$sqlCommand.Parameters[0].Value = $xmlfile.FullName
$sqlCommand.Parameters[1].Value = $xml
$InsertedID = $sqlCommand.ExecuteScalar()
"Inserted row ID $InsertedID for file " + $xmlfile.FullName
}

最佳答案

SQL Server 将 XML 处理为 unicode / UCS-2 (与 utf-16 非常相关)。 Powershell 将字符串作为 2 字节编码的字符串发送,因此 encoding="UTF-8"不是说实话。这就是它提示的原因...

你有几个选择:

  • 使用类似 ((Get-Content $xmlfile.FullName) -replace "'", "''") -replace "UTF-8","UTF-16"在您的 powershell 代码中更改此权限。
  • 使用 Powershell 完全切断声明(只需发送没有 <?xml ...?> 的 XML)
  • 创建一个接受 NVARCHAR(MAX) 的存储过程并使用 T-SQL 更改编码或删除声明。
  • 在接受 NVARCHAR(MAX) 中的 XML 的 SQL-Server 中使用临时表列并在第二步中将导入的数据传输到目标表。 (在许多情况下,暂存表对于更大的导入场景来说是个好主意)

  • 祝你好运

    关于.net - 将 XML 插入 SQL Server 时出现 XML 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342078/

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