0

我在生产中的 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

谢谢

4

1 回答 1

1

有许多可能性。这里有几个:

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

  2. 如果ControlsDB.GetTableFromProc通过首先实例化(new-ing) aDataTable然后从 a 填充它来SqlDataAdapter工作,这似乎是一种常见的做法,那么由于多种原因(由于数据库锁定而超时是一种很可能的可能性),该表可能不是从 proc 中填充,但该方法仍在返回DataTable. 这会给你一个DataTable没有列,如果你试图绑定它肯定会抛出那个错误。

    为了发生这种情况,您需要捕获并抑制在 上发生的 SQL 错误SqlDataAdapter.Fill,但仍要返回DataTable.

于 2013-03-19T16:49:50.583 回答