Salim Al-Adawi Ответов: 2

Vb.net mysql обновление двух изображений в одной и той же форме


Привет

Я пытаюсь обновить 2 изображения в одной и той же форме, используя 2 графических поля и 2 диалоговых окна
, Я могу обновить только первое изображение с помощью PictureBox1, но, к сожалению, я не вижу никаких изменений, примененных ко второму ! .

Я использую следующий код :-


 updateQuery = " UPDATE Student, Relatives , Relatives_Student , Gardian_Relation SET Student_First_Name = '" & txt_F_name.Text _
            & "', Student_Middle_Name = '" & txt_M_name.Text _
            & "', Student_Third_Name = '" & txt_T_name.Text _
            & "', Student_Family_Name = '" & txt_Fm_name.Text _
            & "', Student_DOB = '" & txt_DOB_Date.Text _
            & "', Student_Photo = @Student_Photo" _
            & "', Student_DOB_Cert = @Student_DOB_Cert" _
            & "', Student_Gender = '" & strGender _
            & "', Student_Nationality = '" & strCountry _
            & "', Student_Enroll_Date = '" & txt_En_Date.Text _
            & "' WHERE Student_ID  = '" & intMySelectedCell _
            & "' AND Student.Student_ID = Relatives_Student.rel_Student_ID AND Relatives.Relative_ID = Relatives_Student.rel_Relative_ID AND Relatives.Gardiant_Relation_ID = Gardian_Relation.Gardian_ID  AND gardian_relation.Gardian_ID = '" & intGardian_ID & "'"



        Dim command As New MySqlCommand(updateQuery, connection)
    

        With command 


            Dim bm As Bitmap = New Bitmap(PictureBox1.Image)
            Dim bm2 As Bitmap = New Bitmap(PictureBox2.Image)

            bm.Save(mstream, PictureBox1.Image.RawFormat)
            bm2.Save(mstream2, PictureBox2.Image.RawFormat)

            Dim arrPic() As Byte = mstream.GetBuffer()
            .Parameters.AddWithValue("@Student_Photo", arrPic)


            Dim arrPic2() As Byte = mstream2.GetBuffer()
            .Parameters.AddWithValue("@Student_DOB_Cert", arrPic2)


            .ExecuteNonQuery()

        End With

Any help is extremely appritiated.
Kind regards
Salim

What I have tried:

I have success to update only the first Image

2 Ответов

Рейтинг:
2

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

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


Salim Al-Adawi

Спасибо Вам за ваши комментарии, которые я действительно получил . Хотя я все еще жду тебя.
ответьте на основной вопрос.

Рейтинг:
1

Salim Al-Adawi

Я решил эту проблему, используя следующий код :

cmd = con.CreateCommand()
cmd.CommandText = "обновить набор staff_hr Staff_Name=@name,Staff_Nationality_ID=@nation_id,Staff_Contact_No=@contact,Staff_EMail=@email,Staff_Salary=@salary,Staff_DOB=@dob,Staff_Join_Date=@doj,Staff_Age=@age,Staff_City_ID=@cityid,Staff_Village_ID=@villageid,Staff_photo=@StaffPhoto,Staff_Cert=@Staff_Cert где Staff_id=@id;"
cmd.параметры.AddWithValue("@id", intStaff_ID)
cmd.параметры.AddWithValue ("@name", txt_Staff_Name.Text)
cmd.параметры.AddWithValue("@nation_id", intNationalityID)
cmd.параметры.AddWithValue ("@contact", txt_Staff_Contact_No.Text)
cmd.параметры.AddWithValue ("@email", txt_Staff_EMail.Text)
cmd.параметры.AddWithValue("@зарплата", txt_Staff_Salary.Text)
cmd.параметры.AddWithValue("@Р", дата.Метод parseexact(txt_Staff_DOB.Текст.Отделка, "ДД/ММ/гггг", система.Глобализация.CultureInfo.Языка и региона существует))
cmd.параметры.AddWithValue("@МЮ", дата.Метод parseexact(txt_Staff_Join_Date.Текст.Отделка, "ДД/ММ/гггг", система.Глобализация.CultureInfo.Языка и региона существует))
cmd.параметры.AddWithValue ("@age", txt_Age.Text)
cmd.параметры.AddWithValue("@cityid", intCityID)
cmd.параметры.AddWithValue("@villageid", intVillageID)


- Получить и сохранить изображение

С помощью cmd
Если opn_File_IMG.FileName = Nothing, то ' изображение в диалоге файла изображения

Dim row As DataRow = dt.Rows(0)

Использование mstream в качестве нового ввода-вывода.MemoryStream(CType(row(0), Byte()))

Dim img As Image = изображение.FromStream(mstream)
pic_Staff_Photo.Изображение = img

.Параметры.Добавить(Новый MySql.Data.MySqlClient.MySqlParameter("@StaffPhoto", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Value = (CType(row(0), Byte())) 'получить текущее существующее изображение в базе данных, если PictureBox не имеет изображения'

Конец Использования
Еще
.Параметры.Добавить(Новый MySql.Data.MySqlClient.MySqlParameter("@StaffPhoto", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Значение = IO.File.ReadAllBytes(opn_File_IMG.FileName) ' получить выбранное пользователем изображение
Конец, Если

Если OpenFileDialog1.FileName = Nothing Then ' изображение в диалоге файла изображения

Dim row As DataRow = dt.Rows(0)

Использование mstream в качестве нового ввода-вывода.MemoryStream(CType(row(0), Byte()))

Dim img As Image = изображение.FromStream(mstream)
PictureBox2.Изображение = ИМГ

.Параметры.Добавить(Новый MySql.Data.MySqlClient.MySqlParameter ("@Staff_Cert", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Value = (CType(row(0), Byte())) 'получить текущее существующее изображение в базе данных, если PictureBox не имеет изображения'

Конец Использования
Еще
.Параметры.Добавить(Новый MySql.Data.MySqlClient.MySqlParameter ("@Staff_Cert", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Значение = IO.File.ReadAllBytes(OpenFileDialog1.FileName) ' получить выбранное пользователем изображение
Конец, Если

.Метод executenonquery()

Конец С