Babai JermenKeller Sasmal Ответов: 2

Как заполнить форму 2 с помощью кнопки поиска ?


Ну, я пытаюсь сделать проект для моего последнего года обучения в колледже. Небольшая помощь будет благодарна.

Я пытаюсь найти результат поиска из SEARCH_FROM, который состоит из TextBox1.Text и Button1.Щелчок. После нажатия кнопки с действительным идентификатором(faculty_table) он будет извлекать данные в качестве выходных данных из базы данных и заполнять их во вторую форму 2(fac_mod), как только данные совпадут со значениями базы данных, иначе он покажет, что "данные не найдены".

Как я могу это сделать?

Он показывает некоторые ошибки, такие как "недопустимая попытка, так как нет данных", а также показывает, что "запись найдена", но нет вывода.

Тай для всех драгоценное время.
и извините за плохой английский.

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

соединение = новый объект sqlconnection("сервера=IP,порт;идентификатор пользователя=идентификатор;пароль=пароль;базы данных=базы данных mydatabase")
Тусклый читатель как SqlDataReader
Если TextBox1.Text = "", То
MsgBox("неверный ввод")
Еще
Попробуй
Дим запрос в строке = "выбрать * из факультета, где ID='" &амп; текстовое поле textbox1.Текст &ампер; "'"
соединение.Открыть()
command = New SqlCommand(запрос, соединение)
читатель = команда.Метода executereader
MsgBox("Запись Найдена")
fac_mod.Текстовое поле textbox1.Текст = читатель.GetString("0")
fac_mod.ComboBox5.Текст = читатель.GetString("1")
fac_mod.ComboBox4.Текст = читатель.GetString("2")
fac_mod.Поле combobox1.Текст = читатель.GetString("3")
fac_mod.Поле textbox2.Текст = читатель.GetString("4")
fac_mod.DateTimePicker1.Текст = читатель.GetString("5")
fac_mod.ComboBox2.Текст = читатель.GetString("6")
fac_mod.Textbox3 и.Текст = читатель.GetString("7")
fac_mod.TextBox4.Текст = читатель.GetString("8")
fac_mod.TextBox14.Текст = читатель.GetString("9")
fac_mod.TextBox5.Текст = читатель.GetString("10")
fac_mod.Имя picturebox1.изображение = читатель.GetImage("11")
fac_mod.Покажите()
Меня.Рядом()
соединение.Закрывать()
Поймать ex как исключение
MsgBox(например, Message, MessageBoxButtons.ОК)
Конец Попытки
Конец, Если
Конец Подводной Лодки

2 Ответов

Рейтинг:
7

ZurdoDev

Сначала проверьте, есть ли читатель.HasRows = true. Что-то вроде

if (reader.HasRows)
{
  reader.Read() ' this reads in the first record
' then you can do reader.GetString() etc.
}


Вы также захотите перейти на использование параметров.
Что-то вроде
Dim query As String = "SELECT * from faculty WHERE id=@facultyID" ' this way your database cannot be hacked
... 
command.Parameters.AddWithValue("@faultyID", TextBox1.Text) ' this is the safe way to add your parameters



Кроме того, вы должны изменить TextBox1.Text на что-то вроде txtFaculty, чтобы это что-то значило, когда вы читаете свой код.


Babai JermenKeller Sasmal

тай это мне очень помогло

ZurdoDev

Пожалуйста.

Рейтинг:
14

OriginalGriff

Есть проблемы с этим кодом, которые вам нужно исправить через все ваше приложение, прежде чем вы начнете даже искать проблему, которую вы заметили:
1) Никогда не объединяйте строки для построения 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;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

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

2) не жестко кодируйте строки соединений: они должны храниться в конфигурационном файле, но const значение, используемое во всем вашем приложении, едва ли терпимо, если вы понимаете, что ваше приложение должно изменяться для каждого нового пользователя / установки.

Затем вы можете начать рассматривать свою проблему, которая довольно проста: SqlDataReader не возвращает автоматически строку: вы должны проверить, есть ли какие-либо строки, и вызвать метод Read, чтобы загрузить каждую строку по очереди.
Но сначала исправьте другие проблемы: или ваша база данных будет повреждена или удалена - ваш лучший друг попробует это сделать, просто чтобы увидеть выражение вашего лица...