将 xmlfile 插入数据库时出错
Getting an Error when inserting xmlfile to database
我正在尝试将从流中读取的 xml 文件插入到 mssql 服务器中 xml 类型的列中
像这样:
//从流中读取文件
var reader = new StreamReader(request.InputStream, Encoding.UTF8);
var string = reader.ReadToEnd();
//转换为xmldoc
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(string);
//尝试使用 xmlDoc
将其插入 table
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());
我正在尝试将从流中读取的 xml 文件插入到 mssql 服务器中 xml 类型的列中 像这样:
//从流中读取文件
var reader = new StreamReader(request.InputStream, Encoding.UTF8);
var string = reader.ReadToEnd();
//转换为xmldoc
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(string);
//尝试使用 xmlDoc
将其插入 table 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());