0

Web アプリケーションでレポートを実行しようとすると、次のエラーが発生します。

「/Revenue」アプリケーションでサーバー エラーが発生しました。

入力文字列は、正しい形式ではありませんでした。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.FormatException: 入力文字列が正しい形式ではありませんでした。

ソース エラー:

Line 219:        var ans = from a in analytics.Rows.Cast<DataRow>()
Line 220:                  group a by a["LineTitle"] into g
Line 221:                  select new                  
Line 222:                  {
Line 223:                      Name = g.Key.ToString(),

[FormatException: Input string was not in a correct format.]
   System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt) +10691639
   System.Double.Parse(String s) +23
   Main_Report.<CountryAnalytics>b__2e(IGrouping`2 g) in d:\vistaweb\Revenue\MainReport.aspx.cs:221
   System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +145
   System.Linq.Enumerable.Count(IEnumerable`1 source) +4125469
   ASP.mainreport_aspx.__DataBind__control28(Object sender, EventArgs e) in d:\vistaweb\Revenue\MainReport.aspx:303
   System.Web.UI.Control.OnDataBinding(EventArgs e) +92
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +85
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +187
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +94
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.WebControls.DataList.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +136
   System.Web.UI.WebControls.DataList.CreateControlHierarchy(Boolean useDataSource) +484
   System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) +63
   System.Web.UI.WebControls.BaseDataList.DataBind() +54
   Main_Report.Page_LoadComplete(Object sender, EventArgs e) in d:\vistaweb\Revenue\MainReport.aspx.cs:118
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Page.OnLoadComplete(EventArgs e) +9631466
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +765

ファイル内のコードは次のようになります。

   var ans = from a in analytics.Rows.Cast<DataRow>()
              group a by a["LineTitle"] into g
              select new                  
              {
                  Name = g.Key.ToString(),
                  SalesPersonStats = g.Key.ToString().Contains(SP.FullName),
                  Value = g.FirstOrDefault()["LinaValue"].ToString(),
                  Percentage = g.FirstOrDefault()["LinePercent"].ToString(),
                  Change = Math.Round(double.Parse(g.FirstOrDefault()["LinaValue"].ToString()) - double.Parse(g.LastOrDefault()["LinaValue"].ToString()), 2)
              };

入力文字列が「select new」という正しい形式ではないと言われる理由は何ですか?

ありがとうございました

4

1 に答える 1

1

おそらく、次のステートメントで double.Parse から例外がスローされます。

Change = Math.Round(double.Parse(g.FirstOrDefault()["LinaValue"].ToString()) - double.Parse(g.LastOrDefault()["LinaValue"].ToString()), 2)

.ToList() を LINQ ステートメントの最後に追加して、レポートがバインドされる前にクエリが評価される (および例外がスローされる) ようにします。そこで、フォーマットをデバッグする機会があります。

于 2012-08-28T07:30:27.687 に答える