我正在创建一个方法,使用表适配器使用从Access数据库检索的数据填充一些文本框。
GetCasesWithUserFromCaseId
方法使用username
返回单个案例,该案例通过左侧将我的案例表与我的用户表连接起来找到。
由于某种原因,我在尝试从users表访问联接数据(userdata)时遇到NullReferenceException,但来自cases表的数据有效。我确信所有字段都是为所有用户和所有case-tablerows设置的。
如果这不起作用,我该如何交替获取我的数据?我附上了一张显示我简单数据库的图片。
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();
}
}
答案 0 :(得分:1)
嗯,关键是:如果你在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
将为空。
你需要检查一下!
foreach (caseDB.casesRow casesRow in cases)
{
tbCaseName.Text = casesRow.caseName;
if(casesRow.usersRow != null)
{
tbOwner.Text = casesRow.usersRow.firstName.ToString();
}
}
答案 1 :(得分:0)
您提到GetCasesWithUserFromCaseId()方法正在使用左连接加入案例和用户表。您是否获得了NullReferenceExemption豁免?
我猜你的访问方法的输出结果是
caseName firstName
---------- ----------
Bildsoe NULL
如果是这种情况,那么在您的代码行中:
tbOwner.Text = casesRow.usersRow.firstName.ToString();
casesRow的usersRow属性很可能为null。在尝试引用它之前,您必须检查属性是否为null。