1

データベースから情報を入力するLINQです。これらの例外をキャッチするように try.catch ブロックを設定しました。ただし、メッセージが何であるかを確認しようとしているところに遭遇したと思いますが、メッセージの印刷をバイパスしてエラーページに直接移動します。これが私がこれまでに持っているコードの例です。なぜこれがとても奇妙に振る舞うように見えるのかについて、いくつかの情報を得たいと思います。

 private void CreateEntry()
    {
        var date = DateTime.Today;
        var version = (from v in house.StayLateVersions
                       where v.Active
                       select v).FirstOrDefault();

        if (version == null)
        {
            throw new NullReferenceException();
        }

        //Try to create an entry for the database.  Upon failure, sends the exception to ThrowDbError();

        try
        {
            ResidenceHallInspection rhi = new ResidenceHallInspection();

            rhi.versionId = version.id;
            rhi.submitDate = DateTime.Now;
            rhi.CheckInOrOut = ddlCheck.SelectedItem.Text;
            rhi.Id = txtId.Text;
            rhi.FirstName = txtFirstName.Text;
            rhi.MiddleName = txtMiddleName.Text;
            rhi.LastName = txtLastName.Text;
            rhi.Walls = chbxWalls.SelectedItem.Text;
            rhi.Windows = chbxWindows.SelectedItem.Text;
            rhi.Blinds = chbxBlinds.SelectedItem.Text;
            rhi.Couch = chbxCouch.SelectedItem.Text;
            rhi.CommonRoomCouch = chbxCRCouch.SelectedItem.Text;
            rhi.CommonRoomChair = chbxCRChair.SelectedItem.Text;
            rhi.Doors = chbxDoors.SelectedItem.Text;
            rhi.Carpet = chbxCarpet.SelectedItem.Text;
            rhi.Ceiling = chbxCeiling.SelectedItem.Text;
            rhi.CommonRoomCounter = chbxCRCounter.SelectedItem.Text;
            rhi.Cabinet = chbxCabinet.SelectedItem.Text;
            rhi.Phone = chbxPhone.SelectedItem.Text;
            rhi.Bed = chbxBed.SelectedItem.Text;
            rhi.Desk = chbxDesk.SelectedItem.Text;
            rhi.DeskChairs = chbxDeskChair.SelectedItem.Text;
            rhi.Tub = chbxTub.SelectedItem.Text;
            rhi.Vanity = chbxVanity.SelectedItem.Text;
            rhi.Notes = txtNotes.Text;
            rhi.Building = txtResHall.Text;
            rhi.ApartmentNumber = txtSuitNo.Text;
            rhi.BedSpace = txtBedSpace.Text;

            house.AddToResidenceHallInspections(rhi);
            house.SaveChanges();

        }
        catch (Exception oe)
        {
            ThrowDbError(oe);
            Response.Write(oe.InnerException);
        }
    }

    /*=================================================*/
    /*Possible Errors                                  */
    /*=================================================*/

    private void ThrowDbError(Exception oe)
    {
        Response.Write(oe.Source);
        house.Dispose();
        Session.Contents.Add("FormException", oe);
        Response.Redirect("/Database-Error/", true);
    }
4

1 に答える 1

0

これが発生する最も可能性の高い理由はversion、try/catch ブロックの外でデータベース クエリを実行していることです。この db アクセス コードの例外は、上記のコードでは処理されません。

ブロックを拡張してtry、db アクセス コードも含めてみてください。

var version = (from v in house.StayLateVersions
                   where v.Active
                   select v).FirstOrDefault();

if (version == null)
{
    throw new NullReferenceException();
}

今度はエラーがキャッチされるかどうかを確認します。

于 2013-02-25T21:21:22.683 に答える