在选定的数据源上找不到名称为[数据库列]的字段或属性
本文关键字:数据库 字段 属性 数据源 找不到 | 更新日期: 2023-09-27 17:49:53
我在Visual Studio 2010中编程时遇到了这个奇怪的错误。我有一个列在SQL Server名为"tag_id"。它是表的主键。如果我试图在Visual Studio中的任何引用中使用"tag_id",而不是像这样
<asp:BoundField DataField="tag_id" HeaderText="Current Tags"/>
或
string sql = "INSERT INTO [tag_names] ([tag_id], [name], [created_by], [created_date]) VALUES ('{0}','{1}', '{2}', GETDATE())";
我使用它的任何地方。根据使用情况,我得到了各种不同的错误,但要点是它告诉我tag_id列不存在。但确实如此!让这段代码工作的唯一方法是我从SQL Server复制"tag_id",字面词"tag_id"并粘贴到Visual Studio。虽然拼写是完全相同的,它不会工作,除非我复制和粘贴它从SQL Server。此外,如果我从Visual Studio复制并粘贴查询并将其放在SQL Server中,它会说"tag_id"没有找到。就好像Visual Studio中的文本不适合本专栏一样。如果我只输入名称,其他所有列都没有问题。
有人见过这个吗?
更新:在阅读了Gordon和Grantly的建议后,我试图检查下划线。对于那一列,"tag_id"当我从Visual Studio复制并粘贴到notepad++时,它显示为"tag_id"。当我复制和粘贴"tag_id"从SQL服务器它出现为"tagUS_id"。即使我把它粘贴到这里,它也只显示tag_id,我必须手动添加US。但在notepad++中,它显示的是"tag",然后没有空格,字母"US"用黑色突出显示,然后是"id"。这只发生在这列上。其他带下划线的列也可以。其他主键可以正常工作,其他外键可以正常工作。hmmmmm吗?
我同意Gordon Linoff的观点,由于某种原因,下划线的实际ASCII/Unicode代码是不同的。尝试在文本文件中捕获VS 2010行(它可能已经存在),并将SQL查询保存到文件中。然后比较tag_id中所有字符的ASCII/Unicode值(特别是下划线),您应该找到差异。如果它是正常的ASCII,它可能有十六进制值5F,但你可能确实无意中在Visual Studio中使用Unicode。
见http://msdn.microsoft.com/en-us/library/xwy0e8f2%28v=vs.100%29.aspx
在Visual Studio的"文本编辑器通用"下有一个选项-自动检测没有签名的UTF-8编码,这可能会或可能不会导致这些差异。
请参阅此处的See Also部分,以获取下划线的替代Unicode字符:http://www.fileformat.info/info/unicode/char/5f/index.htm。
(我本来可以简单地评论一下,但是不够有名气)
注意:notepad++是免费的,易于使用,使用TextFX转换功能来显示转换为各种形式的文本(HEX 32将是有用的)。我更喜欢veit
希望能有所帮助
这不是最好的解决方案,但在调查了许多选项后,我无法找到问题的根本原因。我只是在Microsoft SQL Server中删除了表并重新创建了它。在那之后,一切都如预期般顺利。