【问题标题】:Correct Procedure is not executed?正确的程序没有执行?
【发布时间】:2014-02-06 12:37:59
【问题描述】:
public void GettraderwiseLiftingRecords()
{

    DataTable dtLEtraderReport = new DataTable();
    dtLEtraderReport.Clear();
    dtLEtraderReport = objhatcheryBAL.GetchicksaledueReport();
    GVTraderdueReport.DataSource = dtLEtraderReport;
    GVTraderdueReport.DataBind(); 
}

我在页面加载中调用了GettraderwiseLiftingRecords() 方法。如果调试它直接进入这个方法。当GetchicksaledueReport() 方法被执行时,它会进入Master page Login Details 过程。此处“dtLEtraderReport”获取登录详细信息。为什么要采取其他细节?

最后我得到一个异常,例如“DataBinding:'System.Data.DataRowView' 不包含名为'name'的属性”......

请帮帮我...

if (HttpContext.Current.User != null)
{
    if (Session["username"] != null)
    {
        string pageName = Page.Page.AppRelativeVirtualPath.Substring(Page.Page.AppRelativeVirtualPath.LastIndexOf('/') + 1);
        DataTable dtFeatures5 = new DataTable();
        dtFeatures5.Clear();
        ////da = new SqlDataAdapter("Exec Sp_GetUserModuleFeatures '" + Session["UserType"].ToString() + "'", con);
        ////da.Fill(dtFeatures);
        objMatermenuPL.usertype = Session["UserType"].ToString();
        dtFeatures5 = objMastermenuBAL.GetMastermenu(objMatermenuPL);

        DataView dt = new DataView(dtFeatures5);
        dt.Sort = "fld_feature ASC";

        if (dtFeatures5 != null)
        {
        }
    }
}

【问题讨论】:

  • 请提供 GetchicksaledueReport() 的代码。看起来你还没有完全定义问题。
  • 编辑您的问题并添加它会是个好主意。
  • 看,它有时会得到正确的值..但有时“登录”详细信息
  • 如果您在页面中使用任何 ajax 控件,请先将其删除或发表评论,然后尝试不使用它们。
  • 您似乎有两个问题“为什么要采用其他详细信息”以及您遇到的错误。首先对于错误,您应该发布您的 aspx 页面并提及 GetchicksaledueReport() 返回的内容(如果可能,请使用结构)。对于您的第一个问题,您必须提及预期的内容,GetchicksaledueReport() 函数的内容是什么。这样人们就可以提供更合适的答案

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


【解决方案1】:

在 ASP.NET 中,当遇到错误时,有时调试器似乎会分离并继续显示页面。这就是它进入您的登录页面的原因。这是 page_load 失败后的下一步。所以服务器已经转移到下一个页面加载事件。您的(空)catch 块使您更难查看(和调试)此问题的真正原因。

关于“DataBinding: 'System.Data.DataRowView'”的错误可能是因为您的页面有一个绑定到列/元素“名称”的数据网格(或其他绑定属性)。使用编辑器在 .aspx 页面中搜索“名称”。然后调试绑定到它的代码。确保结果集中有一列“名称”。否则,请在您的数据网格(或任何调用它的数据绑定)中注释掉该列,以确认我在说什么。

(因为您更新了代码)很好,您删除了空的 catch 块。
我看不到您的数据网格背后的来源,但您的错误消息是说您的数据集不包含“名称”列,但您的数据网格需要一个“名称”列。
根据您使用@Dilip 的回复链(如下),听起来您的母版页上可能有一个数据绑定字段并且错误就在那里。这可以解释为什么这个错误可能随时出现在任何地方。

查看您的第二个代码块,如果您的会话过期,则这些代码都不会运行。如果您的母版页有数据网格(或其他数据绑定字段),您可能会收到错误,因为没有要绑定的数据。

【讨论】:

    【解决方案2】:

    尝试使用:

    var data = new DataTable();
    using (var connection = new SqlConnection(connection.ConnectionString))
    {
        var command = new SqlCommand("K_HM_GetChickamounttogrid");
        command.CommandType = System.Data.CommandType.StoredProcedure;
        command.Connection = connection;
    
        var dataAdaptor = new SqlDataAdapter(command);
        connection.Open();
        try
        {
            dataAdaptor.Fill(data);
        }
        catch (Exception e)
        {
            this.LogError(e);
        }
    }
    
    return data;
    

    这和你的一样,但可能更清楚。

    【讨论】:

    • 关于 catch 块的好建议!原始代码正在吞噬识别问题所需的信息。
    • 伙计,这是一个示例方法。我们在这里记录错误。请把它注释掉。
    【解决方案3】:

    检查您的 SQL 存储过程,我确定返回的查询将包含转义列,例如 ID、名称 等。

    同时检查“GVTraderdueReport”的属性是否也有转义字符字段/SQL查询的属性。

    【讨论】:

      【解决方案4】:

      您可能在您的程序中输入错误的列名再次检查它,如果它不起作用回复我,我可以建议更多的东西

      【讨论】:

      • 感谢重播 dilip...你是对的,如果我给出了错误的列名...但有时相同的程序会正常执行..但有时我得到了这个异常
      • 你能在设计时定义数据网格中的任何列吗?
      • 这个异常不仅来自这个程序,不仅仅是这个页面..完整的应用程序面临这个异常......
      • 母版页我们使用登录凭据和单个程序..我认为这可能会发生..
      • 您在母版页中提供了dataTable引用并在其他页面中使用它,这可能会发生冲突,因此您可以从母版页中删除此类依赖项并将其放在不同的页面中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多