0

次のエラー メッセージが表示される asp.net アプリケーションがあります。

Exception: System.Reflection.TargetInvocationException

Message: Exception has been thrown by the target of an invocation.

Stack Trace:
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance)
at System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.FormView.DataBind()
at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
at System.Web.UI.WebControls.FormView.EnsureDataBound()
at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

エラーをデバッグするために、EnablePartialRendering 設定を false にしましたが、これは役に立たず、エラーはまったく同じ方法で表示されました。

私が持っている唯一の手がかりは、デバッグの出力ウィンドウに次のメッセージが表示されていることです。

これは、App_Code フォルダーに保持されているコード内でエラーが発生していることを示していますが、実際には 211 個のファイルがあり、それらはすべて App_Code.iqmc5gba.nnn という名前であるため、dll のコンテンツに寄与しているように見えます。 .cs nnn は 0 ~ 210 の数字です

エラーが発生した時点で、コードはフォームビューにレコードを表示するためのデータを取得しています。エラーは、現時点で確認できるデータベース内の 1 つのレコードでのみ発生します。

invalidcastexception が発生した時点で実行されているコード行を特定するために使用できる手法を知っている人はいますか?

4

2 に答える 2

1

これは通常、データを読み取るときに (たとえば、datareader を使用して) 発生し、実際には少なくとも何らかの値があると予想される特定の列が null に戻ります。次のコードを検討してください。

 int age = (int)reader["age"]; //will throw ClassCastException if null

何らかの理由で結果セットのage列に null 値が含まれている場合、保持される値reader["age"]は整数ではなく、別の型であるDBNull.Valueになります。したがって、ClassCastException です。

ソース コードにアクセスできない場合は、良いレコードと悪いレコードを比較し、両方のレコードの対応する列に値があることを確認することをお勧めします。

于 2012-04-19T15:24:42.873 に答える
0

私は同じ問題を抱えていました。問題を修正したかどうかはわかりませんが、Icarusは正しい方向に進んでいます。私が見つけたのは、場合によっては、作成するアカウントのセキュリティ保護用の質問を設定する必要があるということでした。VS2012の[プロジェクト]タブでASP.NetConfigを開くことで問題を解決しました。[プロバイダー]タブをクリックし、サイト管理用のプロバイダーを選択します(私の場合はシングル)。それがアクティブになり、接続をテストしたら、戻って新しいユーザーを追加するときに、セキュリティの質問と回答を入力するオプションがあります。これで問題が解決したようです。

于 2012-11-19T05:52:57.063 に答える