我正面临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
谢谢
答案 0 :(得分:1)
有许多可能性。以下是一些:
如果您的过程具有复杂的逻辑,包括IF-THEN-ELSE逻辑,您可能偶尔会执行省略该字段的SELECT,或者给它一个不同的别名。
如果ControlsDB.GetTableFromProc
首先实例化(新增)一个DataTable
,然后从SqlDataAdapter
填充它,这似乎是一种常见做法,那么由于任何原因(由于数据库锁定导致的超时很可能是这种情况)表格没有从proc中填充,但该方法仍然返回DataTable
。这将为您提供一个没有列的DataTable
,如果您尝试绑定它,肯定会抛出该错误。
为了实现这一点,您需要捕获并抑制SqlDataAdapter.Fill
上可能发生的SQL错误,但仍然会返回DataTable
。