我的工作项目有问题(使用ADO.net实体框架)。我的数据库有2个表:
https://i.stack.imgur.com/y3NzM.png
这是我的存储过程:
CREATE PROCEDURE [dbo].[SP_SELECT]
AS
BEGIN
SELECT I.Id, I.Name, C.Name
FROM ITEM I, CATEGORY C
WHERE I.CategoryID = C.Id
END
我尝试运行此存储过程并收到消息错误,显示:“数据读取器与指定的'TEST2Model.SP_SELECT_Result'不兼容。类型成员'Name1'没有相应的列在具有相同名称的数据阅读器中。“
我认为ITEM中的“Name”属性与CATEGORY中的“Name”之间存在问题。 请帮忙,谢谢!
答案 0 :(得分:5)
答案 1 :(得分:5)
数据阅读器与指定的' TEST2Model.SP_SELECT_Result'不兼容。该类型的成员名称1'在数据阅读器中没有相应的列具有相同的名称。
这个错误很清楚。大多数情况下,您有一个名为SP_SELECT_Result
的类,并且您的存储过程一次返回一个包含列Name1
的结果,因此生成了该类。您已经修改了存储过程,但是您还没有更新该代码。因此,在读取存储过程的结果时,DataReader
正在尝试设置Name1
的{{1}}属性并且找不到它,因为您的存储过程在其结果中没有了。
此外,您的结果中还有2列具有相同名称的列:SP_SELECT_Result
。这不会起作用。
如何解决?
更改存储过程以返回具有唯一名称的列。此外,在Visual Studio中右键单击模型中的存储过程,然后选择“从数据库更新”,以便它可以使用最新的存储过程更改来更新Name
。
答案 2 :(得分:0)
有时您需要检查存储过程是否进行了某些验证,并由于验证而返回了空的数据读取器或未返回数据。
我碰巧我有存储过程,但是它在插入之前已经过一些验证并且有一条打印语句。