数据读取器与指定的不兼容,...在数据读取器中没有对应的同名列

新手上路,请多包涵

我的工作项目(使用 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”之间存在问题。请帮忙,谢谢!

原文由 Hoang Viet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 868
2 个回答

您需要为每一列指定一个唯一的名称,以便 DataReader 在您使用 Item[] 时可以识别每一列。在此示例中,我将第二列和第三列的名称分别更改为“ItemName”和“CategoryName”。

 CREATE PROCEDURE [dbo].[SP_SELECT]
AS
BEGIN
    SELECT I.Id, I.Name ItemName, C.Name CategoryName
    FROM ITEM I, CATEGORY C
    WHERE I.CategoryID = C.Id
END

原文由 John Wu 发布,翻译遵循 CC BY-SA 3.0 许可协议

数据读取器与指定的“TEST2Model.SP_SELECT_Result”不兼容。类型的成员“Name1”在数据读取器中没有同名的对应列。

这个错误很明显。最喜欢你有一个名为 SP_SELECT_Result 的类,并且在某一时刻,你的存储过程返回了一个带有 Name1 列的结果,因此生成了该类。然后,您已经修改了存储过程,但您尚未更新该代码。因此,在读取存储过程的结果时, DataReader 试图设置 --- 的 SP_SELECT_Result Name1 属性,因为您的存储过程没有找到它结果不再是这样。

现在,您的结果中有 2 个具有相同名称的列: Name 。这是行不通的。

怎么修?

更改您的存储过程以返回具有唯一名称的列。此外,在 Visual Studio 中右键单击模型中的存储过程,然后选择从数据库更新,这样它就可以使用最新的存储过程更改来更新 SP_SELECT_Result

原文由 CodingYoshi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进