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

时间:2016-12-14 01:32:34

标签: c# sql .net 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

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

我认为ITEM中的“Name”属性与CATEGORY中的“Name”之间存在问题。 请帮忙,谢谢!

3 个答案:

答案 0 :(得分:5)

< p>您需要为每列提供唯一的名称,以便DataReader可以在您使用< code> Item []< / code>时识别每列。在此示例中,我将第二列和第三列的名称分别更改为“ItemName”和“CategoryName”。< / p> < pre>< code> CREATE PROCEDURE [dbo]。[SP_SELECT] 如 开始     SELECT I.Id,I.Name ItemName,C.Name CategoryName     来自项目I,类别C     在哪里I.CategoryID = C.Id 结束 < /代码>< /预>

答案 1 :(得分:5)

  

数据阅读器与指定的' TEST2Model.SP_SELECT_Result'不兼容。该类型的成员名称1'在数据阅读器中没有相应的列具有相同的名称。

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

此外,您的结果中还有2列具有相同名称的列:SP_SELECT_Result。这不会起作用。

如何解决?

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

答案 2 :(得分:0)

有时您需要检查存储过程是否进行了某些验证,并由于验证而返回了空的数据读取器或未返回数据。

我碰巧我有存储过程,但是它在插入之前已经过一些验证并且有一条打印语句。