C# 查询位置0处没有行

C# 查询位置0处没有行,c#,sql,asp.net,C#,Sql,Asp.net,我是C和.NET新手,我正在努力处理一些抛出错误的代码,它抛出的错误是: There is no row at position 0. 这是我得到的代码,据我所知,如果sql returs 0行404应该显示出来,但是现在我得到了一个堆栈错误 这是堆栈错误: [IndexOutOfRangeException: There is no row at position 0.] System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex) +240938

我是C和.NET新手,我正在努力处理一些抛出错误的代码,它抛出的错误是:

There is no row at position 0.
这是我得到的代码,据我所知,如果sql returs 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;
}

检查是否有任何行:

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;
}

错误在于第0行没有数据-表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
}
或者,当您希望有数据时,请确定可能没有数据的原因。

您应该使用


您的DataTable dt不包含任何数据。可能在位置0处实际上没有行?您可以使用ifdt.Rows.Count>0来检查它。但是你已经加载了数据表了吗?显示代码。为什么有人否决了这个问题?@SeraphimFoA可能是因为它在自己的调查中没有表现出任何努力?
if(dt.Rows.Count > 0)
if(dt == null)