2017-04-11 2 views
1

私は、ストアドプロシージャがあります。私は、ストアドプロシージャを呼び出し、配列として返すようにしようとしていますが、私はエラーを取得ストアドプロシージャの結果を表示するには?

ALTER PROCEDURE [dbo].[GetAllAnnouncements] 
AS 
BEGIN 
    SELECT 
     Description, DisplayStartDate, DisplayEndDate 
    FROM 
     Announcements 
END 

を:

Cannot implicitly Convert Type MyProject.Models.GetAllAnnouncements_Result[] to string[]

マイコード:

public string[] getAllAnnouncements() 
{ 
    using (PerformanceReviewEntities objContext = new PerformanceReviewEntities()) 
    { 
     var ann = objContext.GetAllAnnouncements(); 
     string[] DisplayAnn = ann.ToArray(); 
    } 
} 

私はそれが編集機能のインポート内で何かをしなければならないことは知っていますが、私は何をすべきか分かりません。私は家のコントローラから実行し、私の.cshtmlページでそれを見ることができるようにしたい。

enter image description here

+0

SQL Server Management Studio(SSMS)を使用します。 SQL Serverに付属しており、データベーステーブルとストアドプロシージャを表示できるエクスプローラがあります。 – jdweng

+3

結果は文字列配列ではありません。 'GetAllAnnouncements_Result'の配列です。プロシージャが返すものについて考え、3つのプロパティ(Description、DisplayStartDate、DisplayEndDate)を持つオブジェクトを文字列にすることはできますか? – Crowcoder

答えて

1

関数インポートは、タイプAnnouncementsのオブジェクトのコレクションを返しています。あなたはこの呼び出し

var ann = objContext.GetAllAnnouncements(); 

annはオブジェクトではなく、文字列のコレクションです。これを行う

:あなたは文字列の配列にオブジェクトの配列を割り当てるしようとしているため

string[] DisplayAnn = ann.ToArray(); 

ウィルは失敗します。

あなたが複数のカラムに興味があると仮定すると、代わりにこれを行うことができます:

IEnumerable<Announcements> result = ann.ToArray(); 

し、列挙を返すために、あなたのメソッドのシグネチャを変更します。

public IEnumerable<Announcements> getAllAnnouncements() 

てToArrayへの呼び出し()は結果のロードを強制するために行われます。もしあなたが大丈夫であれば、それを配列にキャストする必要はありません。データベースへの接続が閉じられた後(たとえば、コンテキストが破棄された)列挙を消費しようとすると、問題を抱える人がいます。

+0

フィードバックをいただきありがとうございます。説明、開始日、終了日を返したいと思います。それらの3つの列 – PanzerRage

+0

なぜあなたは文字列の配列にそれをキャストしようとしていますか?私はあなたのニーズを反映するために私の答えを更新します。 – JuanR

+0

私は間違っていることを知っている、私はすべての行を取得する方法を知りません。 – PanzerRage

関連する問題