2010-07-21 46 views
1

我正在編程ASP.NET中的一個網頁,該網頁顯示未列爲參與者的學生列表,並在單擊學生名稱時顯示一個簡要他們的細節總結,因此用戶可以確保他們選擇合適的人。訪問存儲過程的結果集,使用SqlDataSource.Select執行

我的代碼當前正確地獲得它們的ID,將它作爲參數添加到我的存儲過程並執行該過程;

protected void LinkButton_OnClick(object sender, EventArgs e) 
{ 
    LinkButton l = (LinkButton)sender; 
    HiddenField hfv = (HiddenField)l.Parent.FindControl("hfAdmissionNumber"); 
    SqlDataSource2.SelectParameters.Clear(); 
    SqlDataSource2.DataSourceMode = SqlDataSourceMode.DataReader; 
    SqlDataSource2.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; 
    Parameter hfcParam = new Parameter(); 
    hfcParam.Type = TypeCode.Int32; 
    hfcParam.DefaultValue = hfv.Value; 
    hfcParam.Name = "@AdmissionNumber"; 
    hfcParam.Direction = System.Data.ParameterDirection.Input; 
    SqlDataSource2.SelectParameters.Insert(0, hfcParam); 
    System.Data.DataView dv = (System.Data.DataView)SqlDataSource2.Select(DataSourceSelectArguments.Empty); 
} 

然而,當我嘗試訪問的結果我得到以下錯誤:

System.NullReferenceException: Object reference not set to an instance of an object. 

在調試中,似乎沒有任何要返回的結果...只是運行時SQL Server中的存儲過程具有相同的數據,但它會按預期返回單個行。

如何訪問此結果,以便將其綁定到我的字段?

(我在ASP.NET 3.5的工作在Visual Studio 2008,使用SQL Server 2008)

回答

0

異常應該告訴你的錯誤一些更多的信息,特別是在發生錯誤的行。你應該特別關注這一行,試圖確定什麼是空的,並找出如何防範它。

例如,在上面的代碼中,我可以看到你有以下幾點:(爲清楚起見移除中間代碼)

HiddenField hfv = (HiddenField)l.Parent.FindControl("hfAdmissionNumber"); 
hfcParam.DefaultValue = hfv.Value; 

在這種情況下,我可以看到,潛在的FindControl方法所能返回null,在這種情況下,當您嘗試執行hfv.Value時,您將收到NullReferenceException,因爲hfv爲空。

如果你能弄清楚到底是什麼爲空,那應該給你一個更好的指示問題是什麼。提供ASP.NET論壇

+0

正如我所說,這是當我嘗試訪問結果,我得到一個錯誤。所以使用SqlDataSource2.Select語句後的代碼如: System.Data.DataRow dr = dv.Table.Rows [0]; 拋出錯誤。調試時,我無法找到檢索結果實際存儲的位置,這最終是我的問題 - 我如何訪問這些結果?我是否正確地做了,但得到錯誤,或者做錯了,因此錯誤? – VickyB 2010-07-21 14:05:36

+0

@VickyB - 您是否嘗試過使用SQL事件探查器來記錄執行的確切SQL語句,以確保它正在執行您期望的SQL,並使用您期望的參數? – Justin 2010-07-21 14:15:05

+0

我運行了SQL Profiler,它似乎沒有運行該過程......沒有一個SP事件類在他們的文本數據中顯示我的過程。這是否意味着我的程序沒有實際運行? – VickyB 2010-07-22 08:25:05

相關問題