0

データベースが結果セットを返す限り、私のコードは問題なく機能します。何も返さない場合は壊れて、次のエラーが発生します。

System.FormatException: Input string was not in a correct format.

これが私のコードです:

DataTable data = GeneralFunctions.GetData( query );
object sumObject;
sumObject = data.Compute( "Sum(Minutes_Spent)", "" );
if ( reportType == 1 )
{
    RepeaterPCBillable.DataSource = data;
    RepeaterPCBillable.DataBind();
    LabelPCBillable.Text = ParseTime( int.Parse( sumObject.ToString() ) ) == null
        ? ParseTime( int.Parse( sumObject.ToString() ) )
        : ""; // ERROR HERE
}
else
{
    RepeaterDTSTBillable.DataSource = data;
    RepeaterDTSTBillable.DataBind();
    LabelDTSTBillable.Text = ParseTime( int.Parse( sumObject.ToString() ) ) == null
        ? ParseTime( int.Parse( sumObject.ToString() ) )
        : "";
}

ParseTime:

protected string ParseTime ( int TotalMinutes )
{
    int hours = TotalMinutes / 60;
    int minutes = TotalMinutes % 60;

    if ( hours == 0 )
    {
        return String.Format( "{0} minutes", minutes );
    }
    else if ( hours == 1 )
    {
        return String.Format( "{0} hour and {1} minutes", hours, minutes );
    }
    else if ( hours > 1 )
    {
        return String.Format( "{0} hours and {1} minutes", hours, minutes );
    }
    else
    {
        return "";
    }
}
4

3 に答える 3

1

次のチェックを追加してみませんか。

if (data.Rows.Count > 0)
{
   // do your stuff
}
于 2012-05-03T16:20:04.797 に答える
1
using (DataTable data = GeneralFunctions.GetData(query))
{
    if (data != null && data.Rows.Count > 0)
    {
        object sumObject;
        sumObject = data.Compute("Sum(Minutes_Spent)", "");
        if (reportType == 1)
        {
            RepeaterPCBillable.DataSource = data;
            RepeaterPCBillable.DataBind();
            LabelPCBillable.Text = ParseTime(int.Parse(sumObject.ToString())) == null
                ? ParseTime(int.Parse(sumObject.ToString()))
                : "";
        }
        else
        {
            RepeaterDTSTBillable.DataSource = data;
            RepeaterDTSTBillable.DataBind();
            LabelDTSTBillable.Text = ParseTime(int.Parse(sumObject.ToString())) == null
                ? ParseTime(int.Parse(sumObject.ToString()))
                : "";
        }
    }
}
于 2012-05-03T16:22:02.253 に答える
0

例外は正確にどこで発生しますか?このコードの何行にありますか?

私の大げさな推測では、Compute()関数は、整数に解析できない最初の値であるMinutes_Spentに対して、空の文字列の入力を取得します。

解決策は、Compute()を実行する前に、少なくとも1つの行を含む結果セットのチェックを実行することです。行がゼロの場合は、ゼロや「(結果なし)」などのデフォルト値を指定して表示します。

于 2012-05-03T16:22:16.017 に答える