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

Hoa*_*iet 1 .net c# sql database

我的工作项目有问题(使用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
Run Code Online (Sandbox Code Playgroud)

我尝试运行此存储过程并收到一条消息错误,显示:"数据读取器与指定的'TEST2Model.SP_SELECT_Result'不兼容.类型成员'Name1'在数据中没有对应的列读者同名."

我认为它在ITEM中的属性"Name"和CATEGORY中的"Name"之间存在问题.请帮忙,谢谢!

Cod*_*shi 7

数据读取器与指定的"TEST2Model.SP_SELECT_Result"不兼容.类型为"Name1"的成员在数据读取器中没有相应的具有相同名称的列.

那个错误非常清楚.大多数情况下,您有一个名为的类,SP_SELECT_Result并且您的存储过程一次返回包含该列的结果,Name1因此生成了该类.您已经修改了存储过程,但是您还没有更新该代码.因此,在读取存储过程的结果时,DataReader正在尝试设置其Name1属性,SP_SELECT_Result但由于存储过程在其结果中不再具有该属性,因此无法找到它.

此外,您现在还有2个具有相同名称的列:Name在结果中.这不会起作用.

怎么修?

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


Joh*_* Wu 5

您需要为每个列指定一个唯一的名称,以便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
Run Code Online (Sandbox Code Playgroud)