Member 13738315 Ответов: 1

Ссылка на объект не установлена на экземпляр ошибки объекта в VB.NET


Hii..frds.my project have two registrations forms that are User registration and Staff Registration in vb.net and SQL server. The user registration form worked correctly. But Staff Registration have one error (" Object reference not set to an instance of an object "). I make both coding in similar logical. Both coding are logically similarly and I checked..But it shows the error...I already makes both forms in MS Access . That time Staff Registration form correctly.. Now, the same form using MS Access or SQL shows the same prb...but I want to need in SQL not ms access. I described this prb for your understanding. So I tell the ms access.. Now what can i do? Pls hell me frds....

Что я уже пробовал:

Мне нужно починить этот ПРБ..Мне нужна отработанная форма регистрации персонала...

1 Ответов

Рейтинг:
2

OriginalGriff

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

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


Member 13738315

ОК.. итры это... если вы мне поможете,,PLS посмотреть мой кодирования ниже...

Попробуй

Если Len(Trim(TextBox2.Text)) = 0, То
Ящик для сообщений.Show("пожалуйста, введите имя сотрудника", "ошибка ввода", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
Поле textbox2.Фокус()
Выход Из Субмарины
Конец, Если
Если Задав Ему Значение Radiobutton1.Checked = False И RadioButton2.Тогда Checked = False
Ящик для сообщений.Show("Пожалуйста, выберите пол", "ошибка ввода", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
Выход Из Субмарины
Выход Из Субмарины
Конец, Если
Если Len(Trim(TextBox3.Text)) = 0, То
Ящик для сообщений.Show("пожалуйста, введите имя отца", "ошибка ввода", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
Текстовое поле 3.Сосредоточить()
Выход Из Субмарины
Конец, Если
Если Len(Trim(ComboBox1.Text)) = 0, То
Ящик для сообщений.Показать("Пожалуйста, выберите отдел", "ошибка ввода", кнопки MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
Поле combobox1.Сосредоточить()
Выход Из Субмарины
Конец, Если
Если Len(Trim(TextBox5.Text)) = 0, То
Ящик для сообщений.Show("пожалуйста, введите временный адрес", "ошибка ввода", кнопки MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
TextBox5.Сосредоточить()
Выход Из Субмарины
Конец, Если
Если Len(Trim(TextBox6.Text)) = 0, То
Ящик для сообщений.Show("пожалуйста, введите постоянный адрес", "ошибка ввода", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
TextBox6.Сосредоточить()
Выход Из Субмарины
Конец, Если
Если Len(Trim(TextBox8.Text)) = 0, То
Ящик для сообщений.Show("пожалуйста, введите номер мобильного телефона", "ошибка ввода", кнопки MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
TextBox8.Сосредоточить()
Выход Из Субмарины
Конец, Если
Если Задав Ему Значение Radiobutton1.Проверено = Истина Тогда
Пол = Задав Ему Значение Radiobutton1.Текст
Конец, Если
Если RadioButton2.Проверено = Истина Тогда
Пол = RadioButton2.Text
Конец, Если
conn = новый SqlConnection(Connstring)
Коннектикут.Открыть()


типа sqlstring = "вставить в персонал([сотрудники ИД], [имя}, [отчество],DateOfJoining, кафедра, [адреса], [Постоянный адрес], дата рождения, [телефон], [мобильный телефон], [адрес электронной почты], фото,пол) значения('" &амп; текстовое поле textbox1.Текст &ампер; "','" &амп; поле textbox2.Текст &ампер; "','" &амп; textbox3 и.Текст &ампер; "',#" &амп; DateTimePicker1.Текст и amp; "#,'" &ампер; элемент combobox1.Текст &ампер; "','" &амп; TextBox5.Текст &ампер; "','" &амп; TextBox6.Текст &ампер; "','" &амп; DateTimePicker2.Текст &ампер; "','" &амп; TextBox7.Текст &ампер; "','" &амп; TextBox8.Текст &ампер; "','" &амп; TextBox9.Текст &ампер; "',@изображения,'" &амп; пол &ампер; "'"
cmd = New SqlCommand(sqlstring, conn)

УМК.Соединение = conn
Dim ms как Новый Поток памяти()
Dim bmpImage как новое растровое изображение(PictureBox1.Image)
bmpImage.Save(ms, System.Рисование.Изображений.ImageFormat.Jpeg)
Тусклые данные в виде байта() = МС.GetBuffer()
Dim p как новый SqlParameter ("@image", SqlDbType.VarBinary)
п. Значение = данные
УМК.Параметры.Добавить(п)
УМК.Метод executenonquery()
УМК.Располагать()
Коннектикут.Закрывать()

Ящик для сообщений.Show("успешно сохранено", "запись персонала", MessageBoxButtons.Хорошо, MessageBoxIcon.Информация)
Кнопки button3.Включен = Ложь
Поймать ex как исключение
Ящик для сообщений.Show(ex.Message, "Error", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
Конец Попытки

OriginalGriff

Лучше бы ты мне этого не показывал...

У тебя проблемы похуже, чем ты думаешь. Не делайте так с базами данных!
Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Когда вы пройдете через все свое приложение и исправите каждый доступ к базе данных, вы можете начать смотреть на свою нулевую ссылку - что, как я уже сказал, Мы не можем сделать для вас!