Null Reference Exception
Этот код генерирует и исключение 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)
};
4 ответа
Вероятно, у вас есть один или несколько обнуляемых типов (возможно, ваших дат?), У которых нет значений, хотя также может быть, что SelectedValue отсутствует. Убедитесь, что все ваши параметры не равны NULL перед оператором в отладчике, чтобы увидеть, какие именно.
Скорее всего, один из запрашиваемых вами объектов является нулевым.
Я предлагаю распечатать их на стандартный вывод.
Одна из этих строк содержит нулевую ссылку:
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)
Посмотрите на правильные значения в отладчике, на самом деле мы ничего не можем сделать с предоставленным вами кодом.
На самом деле похоже, что вы принимаете ввод непосредственно от пользователя без предварительной проверки или очистки. Мой совет, и это, вероятно, решит ваше NRE, заключается в проверке каждого введенного пользователем значения перед отправкой его в базу данных. Это позволит вам отследить любые ошибки ввода, прежде чем вы добавите в базу данных неверный запрос.
И, пожалуйста, не называйте переменные так же, как объекты. Я имею в виду
DAL dal = new DAL();
по крайней мере, подчеркнуть локальные переменные или использовать другое имя.
DAL _dal = new DAL();
DAL dataAccessLayer = new DAL();