访问使用SqlDataSource.Select执行的存储过程的结果集

时间:2010-07-21 12:44:53

标签: c# asp.net sql-server stored-procedures sqldatasource

我在ASP.NET中编写一个网页,其中显示了未列为参与者的学生列表,点击学生姓名后会向您显示其详细信息的简要摘要,以便用户确保他们选择合适的人。

我的代码当前正确获取了他们的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中运行具有相同数据的存储过程时,它会按预期返回单行。

如何访问此结果,以便将其绑定到我的字段?

(我在使用SQL Server 2008的Visual Studio 2008中使用ASP.NET 3.5。)

2 个答案:

答案 0 :(得分:1)

ASP.NET论坛上提供的答案:

http://forums.asp.net/p/1583276/3995150.aspx#3995150

答案 1 :(得分:0)

该异常应该告诉您有关错误的更多信息,特别是发生错误的行。你应该特别注意这一行,试着确定究竟是什么,并找出如何防止它。

例如,在上面的代码中,我可以看到您有以下内容:(为清晰起见,删除了中间代码)

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

在这种情况下,我可以看到FindControl方法可能可能返回null,在这种情况下,在尝试hfv.Value hfv时会遇到NullReferenceException 1}}为空。

如果你能弄清楚究竟是什么,那么这应该能让你更好地指出问题是什么。