0

我正在创建一种方法,该方法使用表适配器从 Access 数据库中检索到的数据填充一些文本框。

GetCasesWithUserFromCaseId方法返回一个单独的案例,username它是通过将我的案例表与我的用户表左连接找到的。

出于某种原因,我在尝试从 users 表访问连接数据(userdata)时收到 NullReferenceException,但 case 表中的数据有效。我确信为所有用户和所有案例表行设置了所有字段。

如果这不起作用,我该如何交替获取我的数据?我附上了一张图片,展示了我的简单数据库。

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

好吧,关键是:如果你LEFT OUTER JOIN在你的Users桌子上做 a,那么这里的这个陈述是危险的:

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

使用 a LEFT OUTER JOIN,您的案例可能没有用户 - 所以casesRow.usersRow将为空。

你需要检查一下!

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();

caseRow 的 usersRow 属性可能为空。在尝试引用它之前,您必须检查该属性是否为空。

于 2011-02-16T16:43:31.793 回答