C# 数据绑定:“System.Data.DataRowView”不包含名为“AddDate”的属性
我在正在生产的ASP.NET应用程序中遇到了一个问题。我正在使用SQL Server 2008数据库和IIS 7.0 我的问题是:我的网站在一段时间内运行良好,但在一段时间后,它抛出了一个“未处理的异常”。异常消息如下所示 数据绑定:“System.Data.DataRowView”不包含名为“AddDate”的属性 但是,数据库中有一个名为“AddDate”的字段 此异常是随机发生的,过了一段时间后,网站会自动重新正常运行,或者当我回收应用程序池时 我无法找出这种行为的原因 在这方面请帮助我。提前谢谢 HTML代码: 从过程返回的字段: 主题、主题标题、主题详细信息、添加日期、类别、视图否、添加人、提示、活动、主题语言、照片、主题简介、热门新闻、国家、国家ID、国家名称、国家评论、国家标志、代码、活动、语言C# 数据绑定:“System.Data.DataRowView”不包含名为“AddDate”的属性,c#,asp.net,sql-server-2008,C#,Asp.net,Sql Server 2008,我在正在生产的ASP.NET应用程序中遇到了一个问题。我正在使用SQL Server 2008数据库和IIS 7.0 我的问题是:我的网站在一段时间内运行良好,但在一段时间后,它抛出了一个“未处理的异常”。异常消息如下所示 数据绑定:“System.Data.DataRowView”不包含名为“AddDate”的属性 但是,数据库中有一个名为“AddDate”的字段 此异常是随机发生的,过了一段时间后,网站会自动重新正常运行,或者当我回收应用程序池时 我无法找出这种行为的原因 在这方面请帮助我。
谢谢有很多种可能性。以下是一些: 如果您的过程具有复杂的逻辑,包括If-THEN-ELSE逻辑,则您可能偶尔会执行一个省略该字段的SELECT,或者为其指定一个不同的别名 如果ControlsDB.GetTableFromProc首先实例化一个新的数据表,然后从SqlDataAdapter填充它,这似乎是一种常见的做法,由于许多原因,由于数据库锁定导致的超时很可能是表没有从proc中填充,但方法仍然返回DataTable。这将为您提供一个没有列的DataTable,如果您试图绑定到它,它肯定会抛出该错误 为了实现这一点,您需要捕获并抑制在SqlDataAdapter.Fill上发生的SQL错误,但仍然返回DataTable
<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>
DataTable dt = new DataTable();
dt = ControlsDB.GetTableFromProc("GetNewsTitles", new string[] { "@Lang" }, new SqlDbType[] { SqlDbType.NVarChar }, new object[] { "En" }, conn);
rptrNewsTitles.DataSource = dt;
rptrNewsTitles.DataBind();