2016-12-14 42 views
0

私の作業プロジェクト(ADO.net Entity Frameworkの使用)に問題があります。私のデータベースは、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

同じ名前の2つの列を使用しようとすると、おそらく悪い考えです。 'SELECT'でエイリアスを与えます。これを選択しようとしているC#のタイプは何ですか?同じ名前の2つのプロパティ*を持っていますか? – David

+0

C#コードを表示できますか? –

答えて

3

Item[]を使用すると、DataReaderで各列を識別できるように、各列に一意の名前を付ける必要があります。この例では、2番目と3番目の列の名前をそれぞれ "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の結果を戻していたため、そのクラスが生成されました。そのコードを更新していないストアドプロシージャの購入を変更しました。したがって、ストアドプロシージャの結果を読み取るとき、DataReaderSP_SELECT_ResultName1プロパティを設定しようとしており、ストアドプロシージャにその結果がもうないため、そのストアドプロシージャの結果を見つけることができません。

また、同じ名前の列が2つあります。Nameです。これはうまくいきません。

修正方法?

ストアドプロシージャを変更して、一意の名前を持つ列を返します。また、Visual Studioでモデル内のストアドプロシージャを右クリックし、データベースから更新を選択すると、最新のストアドプロシージャの変更でSP_SELECT_Resultを更新できます。

+0

助けてくれてありがとう! –

関連する問題