2016-12-14 58 views
0

我的工作項目(使用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中的「名稱」屬性和CATEGORY中的「名稱」之間存在問題。 請幫忙,謝謝!

+0

試圖有兩個同名的列可能是一個壞主意。在'SELECT'中給他們別名。你試圖選擇它的C#類型是什麼?它有兩個*屬性*的同名嗎? – David

+0

你可以顯示C#代碼嗎? –

回答

3

您需要爲每列指定一個唯一的名稱,以便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 
+0

它確實有效。謝謝你的幫助! –

2

數據讀取器是與指定的 'TEST2Model.SP_SELECT_Result' 不相容。類型成員'Name1'在數據讀取器中沒有相應的列,名稱相同。

這個錯誤很明顯。大多數人喜歡你有一個名爲SP_SELECT_Result的類,並且一旦你的存儲過程返回了一個結果,其中的列Name1在其中,因此該類已生成。您然後修改了您的存儲過程購買您沒有更新該代碼。因此,在讀取存儲過程的結果期間,DataReader正試圖設置SP_SELECT_ResultName1屬性,並且無法找到它,因爲您的存儲過程不再有結果。

現在,您的結果中也有2列同名:Name。這是行不通的。

如何解決?

將您的存儲過程更改爲返回具有唯一名稱的列。另外,在Visual Studio的模型中右鍵單擊存儲過程,然後選擇「從數據庫更新」,以便它可以使用最新的存儲過程更改來更新SP_SELECT_Result

+0

感謝您的幫助! –

相關問題