2017-04-11 56 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

嗨,感謝您的反饋,我想返回描述,開始和結束日期。那三列 – PanzerRage

+0

那你爲什麼要把它轉換成一個字符串數組呢?我會更新我的答案以反映您的需求。 – JuanR

+0

是的,我知道它錯了,我只是不知道如何檢索所有行。 – PanzerRage