2013-05-17 18 views
2

我正在開發一個項目,我無法控制要求使用的產品版本。從Firebird 2.0存儲過程填充ASP.NET SqlDataSource

我正在構建一個ASP.NET用戶控件。數據通過SqlDataSource檢索Firebired 2.0數據庫。一切都很好,直到我需要通過存儲過程而不是SELECT聲明來填充SqlDataSource控件之一。

我已經驗證過程是在EMS SQL Manager中爲Interbase和Firebird返回數據。但是,當我將SqlDataSourceSelectCommand屬性設置爲EXECUTE PROCEDURE myProc並致電Select()時,我沒有收到數據。

我的程序沒有輸入參數,所以在我看來它應該是直截了當的。

這種情況的現實是我可以使用簡單的SELECT聲明,如果我能夠移動到2.1,因爲我可以訪問聚合函數List(),但這不是一種可能性。

有沒有人有任何經驗試圖做到這一點?程序調用是否需要以任何方式進行修改?任何幫助將不勝感激。

回答

0

如果是可選擇的存儲過程(它有SUSPEND命令),那麼你應該用SELECT聲明來調用它,而不是EXECUTE PROCEDURE聲明。所以將你的SelectCommand設置爲

SELECT * FROM spName 

它應該工作。

+0

非常感謝!我覺得沒有想到這樣做是愚蠢的:)。所有數據返回並完美工作! – burghboy

0

我通常會做到這一點,像這樣(針對SQL Server):

// set the SqlDataSource's SelectCommand to the *name* of the stored procedure 
myDataSource.SelectCommand = "myProc"; 

// tell the SqlDataSource that this is a *stored procedure* now 
myDataSource.SelectCommandType = CommandType.StoredProcedure; 

由於您的存儲過程不需要輸入參數可言,這確實應該一切!

使用SQL Server,選擇數據在此設置下工作得很好。

+0

謝謝marc_s。我試過,我從火鳥 – burghboy

+0

得到一個動態的SQL錯誤對不起......我發佈,太快,浪費我的編輯:)。我的錯誤看起來是這樣的: 動態SQL錯誤 SQL錯誤代碼= -104 令牌未知 - 第1行1個 MYPROC 所以我覺得它需要與EXECUTE PROCEDURE被調用,就像我會內火鳥...當我最初做到這一點時,我沒有收到任何數據,但也沒有發現錯誤,而且它看起來像是它窒息的存儲過程的名稱。 我可以使用FB客戶端類獲得數據。現在我將填充一個視圖,我以這種方式綁定到一個網格,但想要使用DataSource,因此我可以使用它的緩存功能。 – burghboy

+0

@burghboy:好的 - 對不起,我不太瞭解Firebird,對於這個話題真的很有幫助。 –

相關問題