ASPX在本地工作但不在服务器上工作

时间:2012-10-09 14:39:55

标签: c# asp.net visual-studio-2010

我已在服务器上上传了一个网络项目。

虽然它在我开发的本地电脑上运行顺畅,但它在服务器上根本没有运行。至于我可以读取错误,这是一个空数据集的问题(从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,网页为什么会发送此错误。如果出现错误,则会使用友好消息设置Label。

感谢。

修改

这是页面加载代码。

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。

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

有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分: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用于字符串和数据集等简单类型。

答案 2 :(得分:1)

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

你的另一部分问题:

它会引发异常,因为你的catch块有一个'throw'语句,它只会通过catch块捕获的同一错误包含所有内部异常细节。

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

内部异常细节将丢失......