插入 XML 数据时,将数据记录作为前缀的无效字符(?)到数据库列 [关闭]
Posted
技术标签:
【中文标题】插入 XML 数据时,将数据记录作为前缀的无效字符(?)到数据库列 [关闭]【英文标题】:Invalid character(?) being prefixed to the data record into database column when inserting XML data [closed] 【发布时间】:2011-11-28 07:47:22 【问题描述】:我在插入数据库的数据中发现了一种奇怪的行为。当我插入一条记录时,在表格中说“table1”,其中一列包含如下值:
?<?xml version="1.0" encoding="utf-8" ?>
- <OrderPayLoad xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<OrderID>182806333</OrderID>
<CreatedDateTime>2011-11-27T22:59:37.56</CreatedDateTime>
<MarketCode>XXX</MarketCode>
<AccountNumber>0</AccountNumber>
<MobileNumber>0</MobileNumber>
<OrderTotal>0</OrderTotal>
<OrderTaxTotal>0</OrderTaxTotal>
<PaymentMethod>NCC</PaymentMethod>
<ReceiptMethod>P</ReceiptMethod>
<ShippingInfo>
<FreightTypeID>1</FreightTypeID>
<ShippingAddressType>STANDARD</ShippingAddressType>
</ShippingInfo>
<BillingInfo>
<BillToZip>-</BillToZip>
</BillingInfo>
<OrderDetails />
<PaymentCard />
<OrderRoutingID>2</OrderRoutingID>
</OrderPayLoad>
直到我到达dbTransaction.Commit()
我在专栏中看到了上面的XML 数据。当我检查数据库并提取相同的记录时,我看到一个额外的字符作为 XML 的前缀。
知道为什么会这样吗?
【问题讨论】:
它可能是一个字节顺序标记(BOM)。在将 XML 插入数据库之前检查您的源 XML。 en.wikipedia.org/wiki/Byte_order_mark 【参考方案1】:你错过了结束标签</OrderPayLoad>
,所以下面是正确的xml,请使用这个:
<?xml version="1.0" encoding="utf-8" ?>
<OrderPayLoad xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<OrderID>182806333</OrderID>
<CreatedDateTime>2011-11-27T22:59:37.56</CreatedDateTime>
<MarketCode>XXX</MarketCode>
<AccountNumber>0</AccountNumber>
<MobileNumber>0</MobileNumber>
<OrderTotal>0</OrderTotal>
<OrderTaxTotal>0</OrderTaxTotal>
<PaymentMethod>NCC</PaymentMethod>
<ReceiptMethod>P</ReceiptMethod>
<ShippingInfo>
<FreightTypeID>1</FreightTypeID>
<ShippingAddressType>STANDARD</ShippingAddressType>
</ShippingInfo>
<BillingInfo>
<BillToZip></BillToZip>
</BillingInfo>
<OrderDetails />
<PaymentCard />
<OrderRoutingID>2</OrderRoutingID>
</OrderPayLoad>
【讨论】:
我已从数据库中插入原始 XML 数据。如果你看到 ”?”字符位于 XML 的开头 能否请您更新插入列的数据类型,谢谢您的时间。 您的 xml 在格式上无效,可以安全地将适当的 xml 插入到您的表中,但是如果您使用的列数据类型不是 xml,那么它应该在没有任何错误的情况下插入,如果您仍然在这种情况下出现错误,请在您的 xml 之前使用N
,例如 N<?xml version="1.0" encoding="utf-8" ?>....
,希望这会有所帮助,感谢您的宝贵时间。
command.Parameters.Add(new SqlParameter("@PayLoad", _payLoad.Trim()));当我尝试从后面的代码插入时使用上面的行。下面是存储过程中的类型声明,@PayLoad text
我无法修改代码,因为它有数百个依赖项。为什么是 ”?”自动添加到文本列的前缀。你知道它为什么被插入吗?【参考方案2】:
您的 SQL 列的数据类型是什么?前缀 char 可以是 UTF-8 使用的“BOM”(字节顺序标记)。如果您的列是 text、char 或 varchar 而不是 ntext、nchar 或 nvarchar,这可能会导致数据前面出现额外的符号。
【讨论】:
command.Parameters.Add(new SqlParameter("@PayLoad", _payLoad.Trim()));当我尝试从后面的代码插入时使用上面的行。 -- 下面是存储过程中的类型声明,@PayLoad text @MubashirKoul 尝试将“text”更改为“ntext”【参考方案3】:此问题已自动修复,已尽力重现。无法找到真正的根本原因。
【讨论】:
以上是关于插入 XML 数据时,将数据记录作为前缀的无效字符(?)到数据库列 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章