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

问题描述

我正在尝试将我从流中读取的 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 文件的第一行不应有任何前导空格:

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());