c# - 将 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());
推荐阅读
- javascript - 在 react-scroll-trigger 中使用 onProgress
- mongodb - Mongodb - com.mongodb.MongoSocketReadException:过早到达流的末尾
- c# - 如何将数据库密码存储在程序中以便访问数据库?
- ios - iOS - pod 'Google-Mobile-Ads-SDK' 和 pod 'Firebase/AdMob' 有什么区别
- json - 如何使用相同的密钥进行多个 API 调用
- typescript - 如何在 Typescript 中声明 DOMMatrix 和 WebKitCSSMatrix?
- nginx - 使用自定义运行状况检查负载平衡 UDP syslog
- node.js - 旧的nodejs代码导入问题{解决}
- r - 根据其他列中的某些条件查找数据框中某些值的斜率
- python - 如何使用 ajax on key up 将此变量从 django 视图发送到 html?