DataBinding:'System.Data.DataRowView'不包含名为'AddDate'的属性

时间:2013-01-18 10:26:46

标签: c# asp.net sql-server-2008

我正面临ASP.NET应用程序中的一个问题,现在正在生产中。我正在使用SQL Server 2008数据库和IIS 7.0。

我的问题是:我的网站运行时间很长,但过了一段时间后它会抛出'an unhandlednException'。异常消息如下

DataBinding:'System.Data.DataRowView'不包含名为'AddDate'的属性。

但是,数据库中有一个名为'AddDate'的字段。

此异常是随机发生的,经过一段时间网站正常运行或者我回收应用程序池时

我无法找出导致此行为的原因。

请在这方面帮助我。提前谢谢....

HTML代码:

    <asp:Repeater ID="rptrNewsTitles" runat="server">
    <ItemTemplate>
    <li class="news-item"><font style="font: 11px 'verdana'; color:#b5202b"><%#(Convert.ToDateTime(Eval("AddDate")).ToUniversalTime().Equals(DateTime.Now.ToUniversalTime())) ? " " + Convert.ToDateTime(Eval("AddDate")).ToUniversalTime().ToShortTimeString() : " " + Convert.ToDateTime(Eval("AddDate")).ToString("dd MMM yyyy")%> : </font><a href='showsubject.aspx?id=<%# Eval("subjectid")%>' style="text-decoration:none;"><%#Eval("SubjectTitle") %></a></li>
    </ItemTemplate>
    </asp:Repeater>

C#代码:

    DataTable dt = new DataTable();
    dt = ControlsDB.GetTableFromProc("GetNewsTitles", new string[] { "@Lang" }, new SqlDbType[] { SqlDbType.NVarChar }, new object[] { "En" }, conn);
    rptrNewsTitles.DataSource = dt;
    rptrNewsTitles.DataBind();

从过程返回的字段:

SubjectID,SubjectTitle,SubjectDetails,AddDate,Category,ViewsNo,AddedBy,Tip,Active,SubjectLanguage,Photo,SubjectBrief,HotNews,Country,CountryID,CountryName,CountryComment,CountryFlag,Code,Active,Lang

谢谢

1 个答案:

答案 0 :(得分:1)

有许多可能性。以下是一些:

  1. 如果您的过程具有复杂的逻辑,包括IF-THEN-ELSE逻辑,您可能偶尔会执行省略该字段的SELECT,或者给它一个不同的别名。

  2. 如果ControlsDB.GetTableFromProc首先实例化(新增)一个DataTable,然后从SqlDataAdapter填充它,这似乎是一种常见做法,那么由于任何原因(由于数据库锁定导致的超时很可能是这种情况)表格没有从proc中填充,但该方法仍然返回DataTable。这将为您提供一个没有列的DataTable,如果您尝试绑定它,肯定会抛出该错误。

    为了实现这一点,您需要捕获并抑制SqlDataAdapter.Fill上可能发生的SQL错误,但仍然会返回DataTable