将 xmlfile 插入数据库时​​出错

Posted

技术标签:

【中文标题】将 xmlfile 插入数据库时​​出错【英文标题】:Getting an Error when inserting xmlfile to database 【发布时间】:2021-07-29 22:01:21 【问题描述】:

我正在尝试将从流中读取的 xml 文件插入到 mssql 服务器中的 xml 类型的列中 像这样:

//从流中读取文件

                    var reader = new StreamReader(request.InputStream, Encoding.UTF8);
                    var string = reader.ReadToEnd();

//转换为xmldoc

                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml(string);

//尝试使用xmlDoc将其插入到表中

        using (SqlConnection con = new SqlConnection(_connectionString))
        
            con.Open();
            using (SqlCommand cmd = new SqlCommand(
                @"INSERT INTO [XMLTable] (XmlData) VALUES(@XmlData);", con))
            
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@XmlData", xmlDoc.InnerXml);

                cmd.ExecuteScalar();
             
            
        

//示例xml:

    <?xml version="1.0" encoding="utf-8"?>
<ChangeSSNR version="1.0" xmlns="http://schemas.testschema.com/ChangeSSNR/1.0/">
  <Header version="1.0">
    <From>someone</From>
    <To>someoneelse</To>
    <TimeStamp>1900-01-01T01:01:01+01:00</TimeStamp>
    <ppnSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
  </Header>
  <ChangeSSNRid id="4294967295">
    <SSNRChange>
      <NewSSNR>09834098098</NewSSNR>
      <OldSSNR>9879879827345</OldSSNR>
    </SSNRChange>
  </ChangeSSNRid>
  <ChangeSSNRid id="42949367295">
    <SSNRChange>
      <NewSSNR>098340980983</NewSSNR>
      <OldSSNR>98798798273453</OldSSNR>
    </SSNRChange>
  </ChangeSSNRid>
</ChangeSSNR>

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

亲切的问候

/鲁迪

【问题讨论】:

请更新您的问题,并添加 XML 示例。我敢打赌,它有用于 SQL Server 的带有“坏”编码的 XML prolog 声明。 另外,代码 sn -p xmlDoc.LoadXml(inläst); 正在使用未知变量。 【参考方案1】:

XML 文件的第一行不应有任何前导空格:

XML

<?xml version="1.0" encoding="utf-8"?>
<ChangeSSNR version="1.0" xmlns="http://schemas.testschema.com/ChangeSSNR/1.0/">
    <Header version="1.0">
        <From>someone</From>
        <To>someoneelse</To>
        <TimeStamp>1900-01-01T01:01:01+01:00</TimeStamp>
        <ppnSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:nil="true"/>
    </Header>
    <ChangeSSNRid id="4294967295">
        <SSNRChange>
            <NewSSNR>09834098098</NewSSNR>
            <OldSSNR>9879879827345</OldSSNR>
        </SSNRChange>
    </ChangeSSNRid>
    <ChangeSSNRid id="42949367295">
        <SSNRChange>
            <NewSSNR>098340980983</NewSSNR>
            <OldSSNR>98798798273453</OldSSNR>
        </SSNRChange>
    </ChangeSSNRid>
</ChangeSSNR>

在处理 XML 时最好使用 LINQ to XML。它自 2007 年起在 .Net Framework 中可用。

c#

...
XDocument xdoc = XDocument.Parse(string);
...
cmd.Parameters.AddWithValue("@XmlData", xdoc.ToString());

【讨论】:

使用 XDocument 使它工作!谢谢伊扎克·哈宾斯基。 @RudyW,很高兴听到建议的解决方案对您有用。请不要忘记将其标记为答案。

以上是关于将 xmlfile 插入数据库时​​出错的主要内容,如果未能解决你的问题,请参考以下文章

使用条件将数据插入配置单元时出错

将数据插入 HIVE 表时出错

通过 PHP 将数据插入 MySQL 表时出错

将数据插入 Hive 分区表时出错

将数据类型 varchar 转换为数字时出错。插入语句[重复]

使用 Pymssql 将数据插入 MS SQL DB 时出错