提问人:Student 提问时间:10/7/2019 更新时间:10/7/2019 访问量:237
从其他表访问列时获取 Null 引用异常
Getting Null Reference Exception while accessing columns from other tables
问:
我正在尝试在 NWTraders 数据库的产品上使用 Linq 在 c# 中执行 CRUD 操作。在添加新产品时,我尝试显示“供应商名称”和“类别名称”,而不是“供应商 ID”和“类别 ID”(它们是“产品”表的外键)。
我尝试添加新产品,但在我按 OK 将其保存到数据库并更新我的数据网格后不久它就崩溃了。但是我注意到新产品正在更新到数据库中,供应商和类别 ID 为 Null,这进一步阻止了我访问产品 Windows 窗体本身,因为它无法检索我在 ADD 期间提供给新产品的相应供应商和类别名称的 ID。
cmbSupplierName.SelectedIndex 似乎收到 NULL 值,并且 this.product.Supplier.Company 抛出 Null 引用异常。类别的问题也是如此。如果我使用 if 条件处理它们,那么它仍然会在下面的代码中抛出异常。
private void LoadProductInformation()
{
lblProductHeader.Text = "Information about :" + this.product.ProductName;
txtProductID.Text = this.product.ProductID.ToString();
txtProductName.Text = this.product.ProductName;
// Not loading for Add Products as User has to enter the values.
if (this.Mode != ProductViewMode.Add)
{
cmbSupplierName.SelectedIndex = cmbSupplierName.FindString(this.product.Supplier.CompanyName);
cmbCategory.SelectedIndex = cmbCategory.FindString(this.product.Category.CategoryName);
txtQuantityPerUnit.Text = this.product.QuantityPerUnit;
txtUnitPrice.Text = this.product.UnitPrice.Value.ToString("C");
txtUnitsInStock.Text = this.product.UnitsInStock.Value.ToString();
txtUnitsOnOrder.Text = this.product.UnitsOnOrder.Value.ToString();
txtReorderLevel.Text = this.product.ReorderLevel.Value.ToString();
chkDiscontinued.Checked = (this.product.Discontinued == true);
}
}
public void LoadDGVProducts(IEnumerable<Product> products)
{
// If there are no products, do nothing and return from the function.
if (products == null) return;
FetchData(); //fetching all the serach parameters
this.dgvProducts.SelectionChanged -= new System.EventHandler(this.DGVProducts_SelectionChanged);
if (dgvProducts.RowCount == 0)
FormatDGVProducts();
dgvProducts.Rows.Clear();
// Go through every product in the product collection and
// add it as a row in the dgv
foreach (Product prod in products)
{
dgvProducts.Rows.Add(
prod.ProductID, // The ID will not actually be shown since it is given to a column that has the Visible property set to False.
prod.ProductName,
prod.Supplier.CompanyName,
prod.Category.CategoryName,
prod.QuantityPerUnit,
prod.UnitPrice.Value.ToString("C"),
prod.UnitsInStock,
prod.UnitsOnOrder,
prod.ReorderLevel,
prod.Discontinued
);
...........................
}
}
由于供应商和类别 ID 在数据库上收到 Null 值,它在“foreach”处向我抛出异常,因为即使在这种情况下有一个值为 null,它也不会让产品显示在数据网格上。
我不知道我应该在哪里将供应商 ID 连接到名称,以便它不会在数据库上接收 Null 值。
答: 暂无答案
评论