【解決方法】xamarin フォームの System.reflection.targetinvocationexception

プログラミングQA


やあ
Xamarin フォームで Insert、Update、Delete、および Select を作成しています。プログラムは正常に動作していますが、2 回または 3 回実行すると例外エラーがスローされます。
1 挿入更新および削除メソッドを記述するためのヘルパー クラスを作成しました
2 APP.cs クラス内に DB プロパティを作成しました
3ボタンクリックイベントで、検証を作成し、挿入および更新メソッドを適用しました。 私はこれらのメソッドを送信しています

4 その後、この例外が毎回発生します。

System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.'

私が試したこと:

ヘルパー クラス

public class MTNRCHelper
   {
       public readonly SQLiteAsyncConnection db;
       public MTNRCHelper(string localDb)
       {
           db = new SQLiteAsyncConnection(localDb);
           db.CreateTableAsync<Materials>();

         // db.DropTableAsync<Materials>();

           db.CreateTableAsync<ToolsDetailNewList>();
          // db.DropTableAsync<ToolsDetailNewList>();


       }

       public async Task<int> SaveMaterial(Materials obj)
        {
        return await db.InsertAsync(obj);
        }
       public async Task<List<Materials>> GetMaterialList()
       {
           return await db.Table<Materials>().ToListAsync();
        }
       public async Task<int> UpdateMaterial(Materials obj)
       {
           return await db.UpdateAsync(obj);
       }
       public async Task<int> DeleteMaterial(Materials obj)
       {
           return await db.DeleteAsync(obj);
       }

       //Method For Tools
       public async Task<int> SaveTools(ToolsDetailNewList obj)
       {
           return await db.InsertAsync(obj);


       }
       public async Task<List<ToolsDetailNewList>> GetToolsList()
       {

           return await db.Table<ToolsDetailNewList>().ToListAsync();

       }
       public async Task<int> UpdateTools(ToolsDetailNewList obj)
       {
           return await db.UpdateAsync(obj);
       }
       public async Task<int> DeleteTools(ToolsDetailNewList obj)
       {
           return await db.DeleteAsync(obj);
       }



   }

App.Cs クラス

private static  MTNRCHelper db;
		public static  MTNRCHelper MyDababase
		{
			get
			{
				if (db == null)
				{
					db = new MTNRCHelper(Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "LocalDb.db3"));
				}
				return db;
			
			}
		}

ページ クリック イベントで

private void btnsave_Clicked(object sender, EventArgs e)
{


        if (string.IsNullOrEmpty(txtNPD_ALTERNATE_OFFPART_NO.Text) ||
            string.IsNullOrWhiteSpace(txtNPD_ALTERNATE_OFFPART_NO.Text)||
            string.IsNullOrEmpty(txtOffSerialNumber.Text) ||
            string.IsNullOrWhiteSpace(txtOffSerialNumber.Text) ||
            string.IsNullOrEmpty(txtonPart.Text) ||
            string.IsNullOrWhiteSpace(txtonPart.Text) ||
            string.IsNullOrEmpty(txtOnPArtNumbers.Text) ||
            string.IsNullOrWhiteSpace(txtOnPArtNumbers.Text) ||
            string.IsNullOrEmpty(txtPartType.Text) ||
            string.IsNullOrWhiteSpace(txtPartType.Text) ||
            string.IsNullOrEmpty(txtNPD_ALTERNATE_PART_NO.Text) ||
             string.IsNullOrWhiteSpace(txtNPD_ALTERNATE_PART_NO.Text) ||
            string.IsNullOrEmpty(txtNPD_OFF_S_NO.Text) ||
             string.IsNullOrWhiteSpace(txtNPD_OFF_S_NO.Text) ||
             string.IsNullOrEmpty(txtdesc.Text) ||
             string.IsNullOrWhiteSpace(txtdesc.Text) ||
            string.IsNullOrEmpty(txtNPD_IPC_REFERENCE.Text) ||
             string.IsNullOrWhiteSpace(txtNPD_IPC_REFERENCE.Text) ||
            string.IsNullOrEmpty(NPDStatusPicker.SelectedItem.ToString()) ||
            string.IsNullOrWhiteSpace(NPDStatusPicker.SelectedItem.ToString()) ||
            string.IsNullOrEmpty(txtEnterPOS.Text) ||
             string.IsNullOrWhiteSpace(txtEnterPOS.Text) ||
            string.IsNullOrEmpty(txtNPD_REQ_QTY.Text) ||
            string.IsNullOrWhiteSpace(txtNPD_REQ_QTY.Text) ||
            string.IsNullOrEmpty(txtNPD_UOM.Text) ||
            string.IsNullOrWhiteSpace(txtNPD_UOM.Text) ||
            string.IsNullOrEmpty(txtNDP_Updated_By.Text) ||
            string.IsNullOrWhiteSpace(txtNDP_Updated_By.Text) ||
            string.IsNullOrEmpty(txtNPD_Inward.Text)||
            string.IsNullOrWhiteSpace(txtNPD_Inward.Text)
            )




        {
            DisplayAlert("message", "Please Fill the Fields", "OK");
        }

        else if (objmaterial != null)
        {
            EditMaterial();
        }
        else
        {
            AddMaterialData();
        }


}

private async void EditMaterial()
{
   // objmaterial.NPD_ALTERNATE_PART_NO = txtNPD_ALTERNATE_PART_NO.Text;

   await App.MyDababase.UpdateMaterial(objmaterial);
  // await Navigation.PushAsync(new NRCMeterialList(objmaterial));
}

private  async void AddMaterialData()
{


   await App.MyDababase.SaveMaterial(new Materials
    {
        PART_NO = txtNPD_ALTERNATE_OFFPART_NO.Text,
        NPD_ON_S_NO = txtOffSerialNumber.Text,
        NPD_ALTERNATE_PART_NO = txtonPart.Text,
        NPD_OFF_PART_NO = txtOnPArtNumbers.Text,
        NPD_REQ_ON_PART_NO = txtOnPArtNumbers.Text,
        NPD_Part_Type = txtPartType.Text,
        NPD_OFF_S_NO = txtNPD_OFF_S_NO.Text,

        NPD_DESC = txtdesc.Text,
        NPD_STATUS = NPDStatusPicker.SelectedItem.ToString(),
        NPD_IPC_REFERENCE = txtNPD_IPC_REFERENCE.Text,
        NPD_POS = txtEnterPOS.Text,
        NPD_REQ_QTY = txtNPD_REQ_QTY.Text,
        NPD_UOM = txtNPD_UOM.Text,
        NDP_Updated_By = txtNDP_Updated_By.Text,
        NPD_Inward = txtNPD_Inward.Text
    });

       await Navigation.PushAsync(new NRCMeterialList());
}

解決策 1

私たちは助けることができません – 私たちはあなたのコード全体と実行中に使用しているデータにアクセスすることはできず、問題を再現するためにあなたが正確に何をしているのかわかりません.

だから、それはあなた次第になるでしょう。
幸いなことに、何が起こっているのかを調べるのに役立つツール、デバッガーを利用できます。 使い方がわからない場合は、Google で「Visual Studio デバッガー」を検索すると、必要な情報が得られます。

関数の最初の行にブレークポイントを置き、デバッガーでコードを実行します。 次に、コードとデータを見て、何が起こるべきかを手動で解決します。 次に、各行を 1 ステップ実行して、予想どおりの動作を確認します。 そうでない場合は、問題が発生したときであり、後戻りして (またはもう一度実行して詳しく調べて) 原因を突き止めることができます。

申し訳ありませんが、私たちはあなたにそれを行うことはできません – 新しい (そして非常に便利な) スキルを学ぶ時が来ました: デバッグ!

コメント

タイトルとURLをコピーしました