列名无效。 [节点名称(如果有)= t0,列名称= 版本]

Posted

技术标签:

【中文标题】列名无效。 [节点名称(如果有)= t0,列名称= 版本]【英文标题】:The column name is not valid. [ Node name (if any) = t0,Column name = version ] 【发布时间】:2012-01-29 18:31:16 【问题描述】:

尝试在我的 Windows Phone Mango 应用程序中查询 SQLCE 数据库时遇到问题。

执行时出现异常

foreach (var item in myDataContext.MyTable.Select(item => item))

The column name is not valid. [ Node name (if any) = t0,Column name = version ]

奇怪的是,当我基于任何单个列执行查询时,它工作正常

foreach (var item in myDataContext.MyTable.Select(item => item.SomeColumn))

知道这里有什么问题吗?

【问题讨论】:

你的版本栏是primary key吗? 我没有版本栏 【参考方案1】:

我安装了LINQ to SQL Debug Visualizer 来找出幕后究竟生成了什么查询

SELECT [t0].[version], [t0].[ID], [t0].[Volume], ... similarly rest of the columns FROM [MyTable] AS [t0]

这很奇怪,因为我的表中没有版本列(曾经)。我查看了我的模型,发现此列已定义

[Column(IsVersion = true)]
private Binary version;

我通过注释掉这两行来删除列并重新运行应用程序。新生成的 SQL 没有任何 version 列,我的查询运行良好。

我正在使用SQLCEMangoCodeGenerator 生成 LINQ to SQL 类。我猜这个工具有错误,因为它生成了一个我的表中没有的额外列

【讨论】:

尝试使用 SQL Server Compact Toolbox 生成 DataContext!【参考方案2】:

我在使用“SQLCEMangoCodeGenerator”工具时遇到了同样的问题。

我开始使用“SQL Server Compact Toolbox”工具,没有遇到任何问题: http://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1/

(在上述网站上搜索“NEW:DataContext”以获取屏幕截图。安装扩展程序后,单击“工具”菜单中的“SQL Server Compact Toolbox”)

【讨论】:

【参考方案3】:

我通过删除整个数据库并重新创建它解决了这个问题。

显然,如果您在数据库中的表版本比您想要使用的旧版本,那么该表中不存在该列。

【讨论】:

【参考方案4】:

在带有 SQL Server Managment Studio 的 SqlCE.sdf 中运行:

DELETE FROM [User] WHERE [User].[UserName] = "zz"

遇到类似问题,列名无效,但将quotations更改为apostrophes

DELETE FROM [User] WHERE [User].[UserName] = 'zz'

它成功了!

【讨论】:

以上是关于列名无效。 [节点名称(如果有)= t0,列名称= 版本]的主要内容,如果未能解决你的问题,请参考以下文章

将名称附加或粘贴到 R 中的列名称

DB2/SQL怎样把列名变为一列数据

sql2008提示“列名无效”,但是能正常查询

R:识别并删除列名无效的列

SSIS excel源列名称不匹配错误

vs2015添加或删除文件时提示名称无效