【问题标题】:Accessing the result set of a stored procedure, executed using SqlDataSource.Select访问存储过程的结果集,使用 SqlDataSource.Select 执行
【发布时间】:2010-07-21 12:44:52
【问题描述】:

我正在 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 中运行具有相同数据的存储过程时,它确实返回了一行,正如预期的那样。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      异常应该告诉您有关错误的更多信息,特别是发生错误的行。您应该专门查看这一行,尝试确定究竟什么是 null,并弄清楚如何防止它发生。

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

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

      在这种情况下,我可以看到 FindControl 方法可能可能返回 null,在这种情况下,当您尝试执行 hfv.Value 时会收到 NullReferenceException,因为 hfv 为 null。

      如果您能弄清楚究竟什么是 null,那应该可以更好地说明问题所在。

      【讨论】:

      • 正如我所说,当我尝试访问结果时,我得到了一个错误。所以在SqlDataSource2.Select语句之后使用代码如:System.Data.DataRow dr = dv.Table.Rows[0];抛出错误。调试时,我找不到检索到的结果实际存储在哪里,这最终是我的问题——如何访问这些结果?我是做对了却出错了,还是做错了导致了错误?
      • @VickyB - 您是否尝试过使用 SQL 分析器记录执行的确切 SQL 语句,以确保它使用您期望的参数执行您期望的 SQL?
      • 我运行了 SQL Profiler,但它似乎没有运行该过程...没有一个 SP 事件类在其文本数据中显示我的过程。这是否意味着我的程序实际上并未运行?
      • @VickyB - 我想是的。您可以尝试在 SQL Server Management Studio 中执行一些 SQL 语句,以确保跟踪正确记录事件,但看起来确实如此(它可以解释为什么您没有看到任何结果!:-p)
      • SQL Profiler 似乎在工作,当我从 Management Studio 运行它时它显示我的 SP...是我的 SqlDataSource.Select 语法不正确吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2013-10-06
      • 2014-06-15
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多