0

これが私のコードです:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session[ "DistID" ] != "" )
        {
            DistInfo distInfo = GeneralFunctions.GetGeneralInformation( ( int )Session[ "DistID" ] );
            launchDate.Text = distInfo.AnticipatedLaunchDate.ToShortDateString();
        }
    }

    public static DistInfo GetGeneralInformation ( int ClientID )
    {
        using ( var conn = new SqlConnection( GetConnectionString() ) )
        using ( var cmd = conn.CreateCommand() )
        {
            conn.Open();
            cmd.CommandText =
            @"SELECT i.GoLiveDate, i.FirstBonusRun, i.TechFName, i.TechLName, i.TechEmail, i.TechPhone, i.WebISPFName, i.WebISPLName, 
              i.WebISPEmail, i.WebISPPhone, i.FullFillFName, i.FullFillLName, i.FullFillEmail, i.FullFillPhone, d.FName,
              d.LName, d.HomePhone, d.Email
              FROM NC_Information i
              INNER JOIN Distributor d
                ON d.DistID = i.ClientID
              WHERE clientID = @value";
            cmd.Parameters.AddWithValue( "@value", ClientID );
            using ( var reader = cmd.ExecuteReader() )
            {
                while ( reader.Read() )
                {
                    var distInfo = new DistInfo
                    {
                        AnticipatedLaunchDate = reader.GetDateTime( reader.GetOrdinal( "GoLiveDate" ) )
                    };

                    return distInfo;
                }
            }
            return null;
        }
    }

public class DistInfo
{
    public DateTime AnticipatedLaunchDate { get; set; }
}

エラーは次のとおりです。

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 14:         if (Session[ "DistID" ] != "" )
Line 15:         {
Line 16:             DistInfo distInfo = GeneralFunctions.GetGeneralInformation( ( int )Session[ "DistID" ] );
Line 17:             launchDate.Text = distInfo.AnticipatedLaunchDate.ToShortDateString();
Line 18:         }


Source File: c:\inetpub\wwwroot\Base\ClientAccessPortal\GeneralInformation.aspx.cs    Line: 16 

データベースは、DateTimeのi.GoLiveDate(AnticipatedLaunchDate)の値、空のDateTime、またはデータベースからのNULLを返すことができます。このエラーを回避する方法がわかりません。助けてくれてありがとう。

4

2 に答える 2

2

Session["DistID"]nullを返します。これは、整数にキャストしようとします。

空の文字列をチェックしますが、null値はそのチェックを通過します-両方をチェックするにはIsNullOrEmpty、または.Net4.0IsNullOrWhitespaceを使用します。

string distId = Session[ "DistID" ];
if ( !string.IsNullOrWhiteSpace( distId ) )
{ ... }

nullでも空でもない文字列があることがわかったので、そのintを確認してください。

string distId = Session[ "DistID" ];    
int distIdValue;

if( !string.IsNullOrWhiteSpace( distId ) && integer.TryParse( distId, out distIdValue ) )
{
    DistInfo distInfo = GeneralFunctions.GetGeneralInformation( distIdValue );
    launchDate.Text = distInfo.AnticipatedLaunchDate.ToShortDateString();
}
于 2012-04-20T21:35:37.070 に答える
1

16行目では、Session ["DistID"]がnullの場合、to(int)のケースは失敗しています。

したがって、Session ["DistID"]を一時変数に割り当て、整数にキャストする前にnull以外かどうかをテストする必要があります。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session[ "DistID" ] != "" )
        {
            var distId = Session[ "DistID" ];
            if (distId != null) {
              DistInfo distInfo = GeneralFunctions.GetGeneralInformation( ( int )Session[ "DistID" ] );
              launchDate.Text = distInfo.AnticipatedLaunchDate.ToShortDateString();
            } else {
              // default display value
            }
        }
    }
于 2012-04-20T21:35:43.820 に答える