0

テーブルアダプタを使用してAccessデータベースから取得したデータを一部のテキストボックスに入力するメソッドを作成しています。

このメソッドは、casesテーブルをusersテーブルに左結合することによって検出されGetCasesWithUserFromCaseIdた単一のcaseを返します。username

何らかの理由で、usersテーブルから結合されたデータ(userdata)にアクセスしようとすると、NullReferenceExceptionが発生しますが、casesテーブルのデータは機能します。すべてのフィールドがすべてのユーザーとすべてのケース(テーブル行)に設定されていると確信しています。

これが機能しない場合、どうすればデータを交互に取得できますか?簡単なデータベースを示す画像を添付しました。

sqlステートメント:

SELECT *
FROM cases
LEFT JOIN users ON cases.caseCreatedBy = users.userId
WHERE caseId = caseNum

C#コード:

public void populateBoxes(int caseId)
{
   caseDBTableAdapters.casesTableAdapter casesAdapter = 
        new caseDBTableAdapters.casesTableAdapter();
   caseDB.casesDataTable cases;
   cases = casesAdapter.GetCasesWithUserFromCaseId(caseId);

   foreach (caseDB.casesRow casesRow in cases)
   {
      tbCaseName.Text = casesRow.caseName;
      tbOwner.Text = casesRow.usersRow.firstName.ToString();
   }
}

データベースレイアウト

ここに画像の説明を入力してください

4

2 に答える 2

1

さて、要点は次のとおりです。テーブルでaを実行する場合、LEFT OUTER JOINここUsersでのこのステートメントは危険です。

foreach (caseDB.casesRow casesRow in cases)
{
    tbCaseName.Text = casesRow.caseName;
    tbOwner.Text = casesRow.usersRow.firstName.ToString();  <== !!!!!
}

を使用するLEFT OUTER JOINと、ケースのユーザーがいない可能性があります。したがってcasesRow.usersRow、nullになります。

あなたはそれをチェックする必要があります!

foreach (caseDB.casesRow casesRow in cases)
{
    tbCaseName.Text = casesRow.caseName;

    if(casesRow.usersRow != null)
    {
        tbOwner.Text = casesRow.usersRow.firstName.ToString();
    }
}
于 2011-02-16T17:30:36.910 に答える
0

GetCasesWithUserFromCaseId()メソッドが、左結合でケーステーブルとユーザーテーブルを結合しているとおっしゃいました。NullReferenceExemptionを取得している免税ですか?

私はあなたのアクセス方法の出力が結果として生じると思います

caseName    firstName
----------  ----------
Bildsoe     NULL

その場合は、コード行で次のようにします。

tbOwner.Text = casesRow.usersRow.firstName.ToString();

CasesRowのusersRowプロパティはnullである可能性があります。参照する前に、プロパティがnullかどうかを確認する必要があります。

于 2011-02-16T16:43:31.793 に答える