此代码生成Null Reference异常。异常出现在初始化参数数组的行。可能是什么问题?我不知道如何遵循堆栈跟踪并对其执行任何逻辑。 提前致谢。
DAL dal = new DAL();
string SQL = @"INSERT INTO Assets ([AssetName],[AssetType],[Model],[Description],
[PurchaseValue],[SalvageValue],[Currency],[DateAcquired,[DateRetire],[ImagePath],
[InUse])
VALUES (?,?,?,?,?,?,?,?,?,?,?)";
OleDbParameter[] par = new OleDbParameter[]{
new OleDbParameter("@assetname",name.Text),
new OleDbParameter("@assettype",assettypes.SelectedValue.ToString()),
new OleDbParameter("@model",model.Text),
new OleDbParameter("@description",description.Text),
new OleDbParameter("@purchasevalue",purchaseval.Value),
new OleDbParameter("@salvagevalue",salvageval.Value),
new OleDbParameter("@currency",currencies.SelectedIndex),
new OleDbParameter("@dateacquired",purchasedate.Value),
new OleDbParameter("@dateretire",purchasedate.Value.AddYears((int)lifetime.Value)),
new OleDbParameter("@imagepath","N/A"),
new OleDbParameter("@addedby",MDIParent1.User.ID)
};
答案 0 :(得分:6)
您可能有一个或多个可以为空的类型(可能是您的日期?)没有值,尽管也可能没有SelectedValue。在调试器中的语句之前检查所有参数是否为非null,以查看哪个。
答案 1 :(得分:2)
您查询的对象之一似乎很可能为空。
我建议将它们打印到标准输出。
答案 2 :(得分:1)
其中一行包含空引用:
new OleDbParameter("@assetname",name.Text),
new OleDbParameter("@assettype",assettypes.SelectedValue.ToString()),
new OleDbParameter("@model",model.Text),
new OleDbParameter("@description",description.Text),
new OleDbParameter("@purchasevalue",purchaseval.Value),
new OleDbParameter("@salvagevalue",salvageval.Value),
new OleDbParameter("@currency",currencies.SelectedIndex),
new OleDbParameter("@dateacquired",purchasedate.Value),
new OleDbParameter("@dateretire",purchasedate.Value.AddYears((int)lifetime.Value)),
new OleDbParameter("@imagepath","N/A"),
new OleDbParameter("@addedby",MDIParent1.User.ID)
查看调试器中的属性值,我们无法对您提供的代码执行任何操作。
答案 3 :(得分:0)
实际上,您似乎直接从用户那里获取输入而未先验证或擦除它。我的建议,这可能会解决您的NRE,是在将每个用户输入的值发送到数据库之前验证它。这将允许您在使用错误查询收集数据库之前捕获输入中的任何错误。
请不要将变量命名为与对象相同。我的意思是
DAL dal = new DAL();
至少强调本地变量或使用其他名称。
DAL _dal = new DAL();
DAL dataAccessLayer = new DAL();