2013-05-26 2 views
-3

я могу получить запись из базы данных и занять в объектыСсылка на объект не установлена ​​в экземпляр объекта. C#

for (int i = 0; i < selectedFishes.Length; i++) 
{ 
    string stm = "SELECT * FROM Data WHERE name='" + selectedFishes[i] + "'"; 
    SQLiteCommand cmd = new SQLiteCommand(stm, conn); 
    SQLiteDataReader rdr = cmd.ExecuteReader(); 
    while (rdr.Read()) 
    { 
     fish[i] = new fish(rdr.GetString(0), rdr.GetDouble(1), rdr.GetDouble(2), rdr.GetDouble(3), rdr.GetDouble(4)); 
     Console.WriteLine(fish[i].name + " " + fish[i].value1 + " " + fish[i].value2 + " " + fish[i].value3 + " " + fish[i].value4);//it can be displayed into console 
    } 
} 

MessageBox.Show(selectedFishes.Length.ToString()+" "+fish.Length.ToString());//results are same if the value >5 cant be displayed 
for (int i = 0; i < fish.Length; i++) 
{ 
    Console.WriteLine(fish[i].name + " " + fish[i].value1 + " " + fish[i].value2 + " " + fish[i].value3 + " " + fish[i].value4); 

} 

почему наклоняет будет отображаться? ошибка «Ссылка на объект не указывает на экземпляр объекта» благодаря, прежде чем

+2

На какой строке происходит ошибка? –

+0

Вторая консоль.writeline –

+0

вы получаете правильное о/р на поле Сообщение? – Arpit

ответ

3

Я принимаю дикое предположение и сказать, что selectedFishes.Length, вероятно, не равна fish.Length. Если быть точным, первое, скорее всего, меньше последнего.

Это означает, что вы создаете объекты только для индексов от 0 до selectedFishes.Length-1, а затем пытаетесь получить доступ к индексу selectedFishes.Length, который по-прежнему null и вызывает это исключение.

Чтобы исправить это, вы можете изменить верхнюю границу второго цикла цикла или выполнить нулевую проверку внутри него.

Редактировать: и вы действительно хотите, чтобы цикл while находился внутри первого цикла? i не изменяется внутри цикла while, поэтому вы продолжаете добавлять объекты fish в один и тот же индекс массива.

+0

Да, это соответствует описанным симптомам. Я бы сказал, что 'selectedFishes.Length

+0

Я попытался изменить fish.lenght в selectedfishes.lenght, но результат такой же –

+0

i ' измените, если спасибо –

0

Добавьте разрывную линию ко второй записи кантона, нажав f9. Нажмите f5. Пусть ваша программа попадает в точку останова. Проверьте, является ли имя или значение1-4 нулевым. Добавьте код для обработки нулевых значений.

+0

, то? мой код не может достичь этого кода, вызванного ошибкой –

+0

Если вы не можете связаться со второй строкой писем, где вы сказали, что произошла ошибка, тогда должно быть что-то неправильно раньше. Добавьте abreakpoint несколько строк выше и выполните код, исследующий содержимое ваших объектов. Вы должны прочитать некоторое представление об отладке в визуальной студии. Вам потребуется отладка с вероятностью 100%. – wonko79

1

Я бы всегда говорил в NullReferenceException, чтобы попробовать ToString() каждый объект, который вы ожидаете иметь значение.

Смежные вопросы