将 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 -pxmlDoc.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 插入数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章