我是C#和.NET的新手,我正在努力解决一些抛出错误的代码,它抛出的错误是:
There is no row at position 0.
这是我得到的代码,据我所知,如果sql重写0行应该显示404,但是当时我收到了堆栈错误。
这是堆栈错误:
[IndexOutOfRangeException: There is no row at position 0.]
System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex) +2409382
System.Data.DataRowCollection.get_Item(Int32 index) +20
Targetting.ArticlePage.Page_Load(Object sender, EventArgs e) in C:\SRC\Site1\Web\Article\Trunk\Article.aspx.cs:78
CommonBasePageClass.BaseWebPage.OnLoad(EventArgs e) +50
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178
以下是我认为抛出错误的代码:
//If the article is Archived or Unknown or has expired then all users should be shown an "unavailable" message instead of the content
if (dt.Rows[0]["pagestatusid"].ToString() == "3" || dt.Rows[0]["pagestatusid"].ToString() == "0" || (dt.Rows[0]["expirydate"] != DBNull.Value && DateTime.Parse(dt.Rows[0]["expirydate"].ToString()) < DateTime.Now))
{
pnlDraftWarning.Visible = false;
pnlContentNotAvailable.Visible = true;
pnlMainContent.Visible = false;
Response.StatusCode = 404;
return;
}
答案 0 :(得分:4)
错误是第零行没有数据 - 表dt
为空。
代码期望至少有一行
if (dt.Rows[0]["pagestatusid"].ToString() == "3" || dt.Rows[0]["pagestatusid"].ToString() == "0" || (dt.Rows[0]["expirydate"] != DBNull.Value && DateTime.Parse(dt.Rows[0]["expirydate"].ToString()) < DateTime.Now))
{
}
您可以通过添加保护条件来检查是否有数据来解决此问题。
if (dt == null ||
dt.Rows.Count < 1 ||
dt.Rows[0]["pagestatusid"].ToString() == "3" ||
dt.Rows[0]["pagestatusid"].ToString() == "0" ||
(dt.Rows[0]["expirydate"] != DBNull.Value &&
DateTime.Parse(dt.Rows[0]["expirydate"].ToString()) < DateTime.Now))
{
// other code
}
或确定在您期待某些数据时可能没有数据的原因。
答案 1 :(得分:0)
检查是否有任何行:
if (
dt.Rows.Count()>0 &&
(
dt.Rows[0]["pagestatusid"].ToString() == "3" ||
dt.Rows[0]["pagestatusid"].ToString() == "0" ||
(
dt.Rows[0]["expirydate"] != DBNull.Value &&
DateTime.Parse(dt.Rows[0]["expirydate"].ToString()) < DateTime.Now
)
)
)
{
pnlDraftWarning.Visible = false;
pnlContentNotAvailable.Visible = true;
pnlMainContent.Visible = false;
Response.StatusCode = 404;
return;
}
答案 2 :(得分:0)
你应该使用
if(dt.Rows.Count > 0)
或强>
if(dt == null)