0

サーバーにWebプロジェクトをアップロードしました。

開発が行われたローカルPCでスムーズに実行されていましたが、サーバーではまったく実行されていません。エラーを読み取ることができる限り、空のDataSet(SQLデータベースからデータをフェッチする)に問題があります。繰り返しますが、aspxをローカルで実行すると、すべて問題ありません。エラーログに表示されるもう1つの問題は、ローカルドライブ「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がある場合に、なぜWebページがこのエラーを送信するのかということです。エラーが発生した場合は、わかりやすいメッセージでラベルを設定します。

ありがとう。

編集

これがページ読み込みコードです。

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がnullであるのは、WebがSQLサーバーと通信できないためです。したがって、エラー。基本的に、デバッグ中は正常に実行されますが、サーバー上では実行されません。

何か案は?ありがとう。

4

3 に答える 3

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

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

ローカルマシンで実行しているときに、ローカルサーバーからデータを取得していて、サーバーデータベースエンジンからデータを取得している可能性があります。テーブルが空であるか、テーブルが存在しない可能性があります。データセットのフェッチ方法でエラーがないか確認してください。 ..trycatchがそのエラーを隠している可能性があります。

質問の別の部分:

catchブロックに'throw'ステートメントがあるため、その例外がスローされます。これは、catchブロックによってキャッチされたのと同じエラーと、すべての内部例外の詳細を通過します。

注:catch(Exception ex){throwex;}と書く場合

内部例外の詳細は失われます...

于 2012-10-09T15:33:45.423 に答える