2013-08-26 4 views
0

Когда Microsoft начала принудительно инициализировать наборы данных с помощью инструкции «Новый»? Моя компания имеет веб-сайт, который был начат много лет назад, и много наборов данных были объявлены с заявлением, какVB.Net инициализация наборов данных

Dim someDataset as Dataset = Nothing 

Этот код работал в течение длительного времени, но мы недавно начали получать ошибки заявляя значение не может быть пустым. Имя параметра: набор данных.

Я сделал все возможное, чтобы обновить этот старый код, но я не знаю о каких-либо обновлениях библиотек, которые мы используем, и я пытаюсь определить, с чего началась эта ошибка. Спасибо

Я хотел бы подчеркнуть, что никаких изменений в коде не было до того, как возникла ошибка, так как это было маловероятно. Это большое приложение и наборы данных используются во всем его множеством способов. Он работает в течение многих лет и работал так, как ожидалось, до того, как эта ошибка возникла в последнее время.

+1

Такое изменение звучит очень маловероятно. И это ** полностью ** зависит от того, что вы делаете с набором данных. – SLaks

+0

VB требует экземпляров с VB.Net. Были случаи в VB6 и небольшое число в VB.Net, где язык предоставил экземпляры по умолчанию. Это, как правило, связано с пользовательским интерфейсом, но я не знаю, что это происходит в DataSet' – JaredPar

+0

FWIW, 'Dim someDataset as Dataset = Nothing' является избыточным. Вы можете оставить часть '= Nothing', и результат будет тем же самым IL. –

ответ

1

Это не изменилось с первого дня работы .NET. Все ссылочные типы должны быть созданы с помощью оператора New где-либо, иначе они останутся нулевой ссылкой (Nothing).

Похоже, что какая-то другая часть приложения, которая использовалась для создания набора данных, была удалена или изменена так, что она иногда возвращает Nothing.

+0

Я знаю, как это звучит, но это потребовало бы внесения изменений в несколько сотен мест, где приложение использует наборы данных – user2718511

+0

Не так ли? Или может быть несколько общих мест, которые эти несколько сотен также ссылаются? –

+0

Я попытался найти что-то общее с функциями, заполняющими данные, возвращающие ошибки. Я надеялся, что может существовать конкретная база данных или соединение, используемое для заполнения данных, которые могут вызвать проблему, или службы, на которую они ссылаются. Изучив его несколько дней, я не смог найти ни одной вещи, которую они имели, кроме набора данных, которые не были инициализированы «новым» заявлением до того, как они были заселены. Добавление этой инструкции устранило проблему, но не объясняет, почему код работал без ошибок в течение нескольких лет. – user2718511

0

Существует разница между объявлением и созданием экземпляра.

Эта строка объявляет DataSet:

Dim myDataSet As DataSet 

Примечание: Так как вы только объявили DataSet объект, он не указывает на экземпляр, поэтому Nothing.

Эта линия создает экземпляр DataSet:

myDataSet = New DataSet() 

Часто вы увидите линии вместе взятые, как это:

Dim myDataSet = New DataSet() 

Если вы только объявить DataSet, то вы должны быть уверены, чтобы проверить если это Nothing, прежде чем использовать его, например:

If myDataSet Is Not Nothing Then 
    ' Use myDataSet because there is an instance of it 
End If 

Примечание: вы должны ВСЕГДА проверять, является ли тип возврата FunctionNothing или нет.

+0

Это именно то, что мы сделали, чтобы исправить проблему. Мы прошли и обнаружили каждый экземпляр набора данных, который не был инициализирован новым заявлением. Я не понимаю, почему он работал, не делая этого раньше. – user2718511

+0

@ user2718511 - к сожалению, я считаю, что это будет невозможно для нас ответить. :-( –

+0

@ user2718511 - вы можете изучить шаблон «Null Object». –

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