我是C#的新手,我正在尝试使用本地数据库的方便的adaper-dataset组合。虽然我很惊讶我偶然发现了一个问题是多么容易和有用:
每当我尝试用适配器填充Item表时,我得到Invalid object name SQLexception, 我对所有表使用相同的数据集,dsOns.Users / dsOns.Items。 问题是,用户适配器确实能够识别并成功使用Users数据库(dbo.Users),而items适配器无法找到表(dbo.Item)。
以下是一些片段:
UsersTableAdapter uAdapter = new UsersTableAdapter();
ItemTableAdapter iAdapter = new ItemTableAdapter();
用户选择:
SELECT Id, name, password, sold, isLogged, lastLog FROM dbo.Users
项目选择:
SELECT Id, name, sale_price, min_price, cog FROM dbo.Item
两者都使用相同的连接字符串:
Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\ons_data.mdf;Integrated Security=True;Connect Timeout=30
另请注意,在Dataset设计器中,适配器工作正常,它选择成功。该错误仅发生在代码中。
架构图片:
什么可能导致这种情况?
答案 0 :(得分:0)
我不确定在某些情况下是否可能在您的连接环境中将项目视为保留字。可能想参考[dbo]。[item]。
答案 1 :(得分:0)
好的,这很奇怪,我通过简单地更改数据库资源管理器的视图来解决它,发现应用程序使用两个数据库,在UI(数据集设计器)中它使用我的原始数据库,而在代码中它使用相同的数据库(但是,因为我通过数据集设计器更改了它已经过时)被复制到调试文件夹,因此仅包含Users表并导致错误
答案 2 :(得分:0)
在我的情况下,尝试更改要传递给SqlDataReader的查询,该查询为"Select [Name],[Location],[Email] FROM [dbo].[CreateDB]"
,但我尝试了"Select Name,Location,Email FROM YourTableName"
并成功了,您也可以使用"Select * FROM YourTableName"
。