0

我已经在服务器上上传了一个 Web 项目。

虽然它在我进行开发的本地电脑上运行顺利,但它根本没有在服务器上运行。据我所知,空数据集存在问题(从 SQL 数据库中获取数据)。同样,在本地运行 aspx 时,一切正常。我在错误日志中看到的另一个问题是它指向我的本地驱动器“D:...”它不应该指向服务器地址吗?

错误。

There is no row at position 0.

Exception Details: System.IndexOutOfRangeException: There is no row at position 0.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[IndexOutOfRangeException: There is no row at position 0.]
   System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex) +2474798
   System.Data.DataRowCollection.get_Item(Int32 index) +21
   WEB.Default.Page_Load(Object sender, EventArgs e) in D:\dev\Visual Studio\Temp\WEB\Default.aspx.cs:59
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064

任何想法?我使用 VS2010 的发布工具,它成功上传到服务器。但它不起作用。

我不明白的另一件事是,如果我在页面加载中有 try/catch,为什么网页会发送此错误。如果有错误,它会设置一个带有友好消息的标签。

谢谢。

编辑

这是页面加载代码。

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                Session["FlagOpen"] = false;
                var windowsIdentity = WindowsIdentity.GetCurrent();
                if (windowsIdentity != null)
                {
                    var userName = windowsIdentity.Name;
                    userName = Regex.Replace(userName, ".*\\\\(.*)", "$1", RegexOptions.None);
                    var ds = _objUser.GetRanking(userName);
                    var ranking = ds.Tables[0].Rows[0][1].ToString();
                    _objPersona.Ranking = ranking;
                    _objPersona.UserName = userName;
                    _objPersona.RealName = ds.Tables[0].Rows[0][0].ToString();
                    Session["User"] = _objPersona;
                    LblUserName.Text = ds.Tables[0].Rows[0][0].ToString();
                    ds = _objUser.GetFAQ(userName);
                    var cant = ds.Tables[0].Rows.Count;                        
                }
                else
                {
                    BtnAbrirBandeja.Enabled = false;
                    LblUserName.Text = "Not allowed.";
                }
            }
        }
        catch (Exception)
        {
            LblWarnings.Text = "Error. Please contact sysadmin.";
            throw;
        }

    }

编辑 2。

页面继续在本地工作。但不在服务器上。它抛出指向本地文件夹的原始错误(当它已经从服务器上载并运行时)。DataSet 为空是 Web 无法与 SQL 服务器通信的结果。因此错误。基本上,它在调试时运行正常,但不是在服务器上。

有任何想法吗?谢谢。

4

3 回答 3

1

null在尝试从数据集中访问之前,您需要测试您element的数据集,因此会出现错误消息:

if (ds!=null)
 { 
  //continue and access the dataset
 }
else
 {
  //you didn't get any data or ds is simply null (result set is null)
 }

您也误用了var关键字,您不需要将其var用于字符串和数据集等简单类型。

于 2012-10-09T15:17:50.193 回答
1

无论出于何种原因,您的数据无法访问或不存在:

[IndexOutOfRangeException: There is no row at position 0.]

var ranking = ds.Tables[0].Rows[0][1].ToString();

ds.Tables.length在执行该行之前,您需要检查(或计数)。

于 2012-10-09T15:09:48.070 回答
1

可能是在您的本地机器上运行时,它从您的本地服务器获取数据,现在它从您的服务器数据库引擎获取数据..那里的表可能是空的,或者那里可能不存在表..检查您的数据集获取方法是否有任何错误..您的尝试捕获可能隐藏了该错误..

你的另一部分问题:

它会抛出该异常,因为您的 catch 块有一个“throw”语句,该语句将通过 catch 块捕获的相同错误以及所有内部异常详细信息。

注意:如果你写 catch(Exception ex) {throw ex;}

内部异常详细信息将丢失...

于 2012-10-09T15:33:45.423 回答