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();
Другие вопросы по тегам