c# - 可空 xml 列的 Linq to sql 错误 "Data at the root level is invalid "

标签 c# sql xml linq-to-sql dbtype

我已经创建了一个表

CREATE TABLE [dbo].[tab1]( 
 [Id] [int] NOT NULL, 
 [Name] [varchar](100) NOT NULL, 
 [Meta] [xml] NULL, 


CONSTRAINT [PK_tab1] PRIMARY KEY CLUSTERED  
( 
     [Id] ASC 
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

当我执行 linq to sql 查询以获取数据时,它抛出错误“根级别的数据是无效的 linq”。在进一步调查中,我了解到在这种情况下元列为空。实际上它是可为空的我是否必须删除可为空并将一些空白根节点设置为默认值或者是否有其他方法可以消除错误。


我的 linq 查询抛出错误

     var obj1= (from obj in dbContext.tab1s
  where obj.id== 123
select obj).FirstOrDefault<Tab1>();

最佳答案

如果 XML 列的值为 NULL,在任何情况下您都不会收到此错误。

但是,如果该字段包含错误提示的格式错误的 XML,您将收到此错误。

SQL Server 允许您这样做:

UPDATE tab1
SET Meta = 'blah'
WHERE id = 123

显然字符串“blah”是无效的 XML,但 SQL Server 仍然允许它。 Linq to SQL 不会,因为它会尝试将该 XML 实际加载到 XElement 中。如果您使用该列中的值运行查询,您将得到完全相同的错误,根级别的数据无效

为了修复此错误,您需要修复数据库中存在的格式错误的 XML。

关于c# - 可空 xml 列的 Linq to sql 错误 "Data at the root level is invalid ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2341629/

相关文章:

xml - 当我添加hive-site.xml时,Hive Shell无法打开

c# - 将 SqlDataSource 转换为 DataTable 和 DataView

c# - 为什么这个 foreach 循环不抛出 "collection was modified"异常?

c# - 如何更改 C# 中的 default(T) 返回值?

mysql - MySQL 中如何汇总多个列

.net - 在 .NET 中使用 XmlReader 转义 XML 实体?

xml - Jackson 或 JAXB,哪个更适合 JSON?

c# - 从 Fortran 调用 C#

mysql - SQL多对多计数求和

sql - Django:根据相交对象(共同 friend )的数量排序项目