Почему GDI+ ошибка при не обновлении образа ?
Ну, я делаю мини - проект из давних времен. Прежде всего я хотел бы поблагодарить всех старшеклассников codeproject за то, что они помогали мне во время моего проекта и до сих пор помогают.
Я проверял свой проект, но понял, что в профильном разделе факультета есть некоторые ошибки.
Ошибка: общая ошибка произошла в GDI++
Я начал проверять свой код, но там не было ничего подозрительного. Проблема возникает в том, что
Форма Profile_Update.
Если я пытаюсь обновить его с помощью некоторых деталей, таких как имя или другие детали, только тогда я получаю эту ошибку. Теперь, если я обновлю имя, другое и фотографию профиля, то я не получу ошибку и обновление базы данных.
Так что в реальном случае владелец профиля в основном не обновляет свою фотографию периодически. Но я ищу реального решения этой проблемы.
Моя строка обновления такова
="SELECT * from [USERDATA] name=@name,dob=@dob,sex=@sex,addr=@addr,phone=@phone,avatar=@avatar WHERE [ID]='" & IDBOX.Text & "'" update.Parameters.AddWithValues("@name", SqlDbType.VarChar).Value = NameHere.Text update.Parameters.AddWithValues("@dob", SqlDbType.VarChar).Value = DobSelect.Value.Date update.Parameters.AddWithValues("@sex", SqlDbType.Int).Value = GenBox.Text update.Parameters.AddWithValues("@addr", SqlDbType.VarChar).Value = AddrBox.Text update.Parameters.AddWithValues("@phone", SqlDbType.VarChar).Value = Mobile.Text update.Parameters.AddWithValues("@name", SqlDbType.VarChar).Value = NameHere.Text Dim ms As New System.IO.MemoryStream AvatarBox.Image.Save(ms,AvatarBox.Image.RawFormat) update.Parameters.AddWithValues("@avatar", SqlDbType.Image).Value = ms.ToArrey If update.ExecuteNonQuery() =1 Then MsgBox("Faculty Update")
Он работает, если я выбираю новую картинку в AvatarBox, иначе его бросает ошибка GDI++.
Это бросает ошибку, если я изменяю некоторые поля, такие как имя, dob и т. д.
Его беспокойство без ошибок, если я обновлю все.
Любое исправление для этого. Надеюсь, я заставлю вас понять.
Еще одна вещь заключается в том, что моя форма обновления факультета заполняется DataGridView с именем FacultyDGV CellClick event.
Если я нажму на некоторые поля в FacultyDGV, то форма 2 откроется автоматически с заполненными данными.
Я могу добавить новое изображение без единой ошибки, но обновление не работает.
Проект получился код..
Что я уже пробовал:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Try If TextBox2.Text = "" Then Label25.Text = "* Faculty Name cannot be left blank." Label25.ForeColor = Color.Red ElseIf ComboBox1.Text = "< Select >" Then Label25.Text = "* Gender must be selected." Label25.ForeColor = Color.Red ElseIf TextBox3.Text = "" Then Label25.Text = "* Address cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox4.Text = "" Then Label25.Text = "* District cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox5.Text = "" Then Label25.Text = "* State cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox14.Text = "" Then Label25.Text = "* Pin cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox6.Text = "" Then Label25.Text = "* Country cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox8.Text = "" Then Label25.Text = "* Contact No cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox10.Text = "" Then Label25.Text = "* Username cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox11.Text = "" Then Label25.Text = "* Password cannot be left blank." Label25.ForeColor = Color.Red ElseIf TextBox11.Text <> TextBox12.Text Then Label25.Text = "* Please, Check the passwords you've entered." Label25.ForeColor = Color.Red ElseIf ComboBox2.Text = "< Select Question >" Then Label25.Text = "* Security Question must be selected." Label25.ForeColor = Color.Red Else OpenConnection() Label25.Text = "* Updating your profile..." Label25.ForeColor = Color.Black Dim cmd2 As New SqlCommand("UPDATE [userdata] SET name=@name,dob=@dob,sex=@sex,addr=@addr,city=@city,state=@state,pin=@pin,country=@country,nat=@nat,mobile=@mobile,email=@email,dept=@dept,sub=@sub,username=@username,password=@password,security=@security,answer=@answer,avatar=@avatar,modified=@modified WHERE id='" & TextBox1.Text & "'", connection) cmd2.Parameters.AddWithValue("@name", SqlDbType.VarChar).Value = TextBox2.Text cmd2.Parameters.AddWithValue("@dob", SqlDbType.VarChar).Value = DateTimePicker1.Value.Date Dim gender As String Dim value As Integer gender = ComboBox1.Text If gender = "Male" Then value = 1 ElseIf gender = "Female" Then value = 2 ElseIf gender = "Others" Then value = 3 End If cmd2.Parameters.AddWithValue("@sex", SqlDbType.Int).Value = value cmd2.Parameters.AddWithValue("@addr", SqlDbType.VarChar).Value = TextBox3.Text cmd2.Parameters.AddWithValue("@city", SqlDbType.VarChar).Value = TextBox4.Text cmd2.Parameters.AddWithValue("@state", SqlDbType.VarChar).Value = TextBox5.Text cmd2.Parameters.AddWithValue("@pin", SqlDbType.VarChar).Value = TextBox14.Text cmd2.Parameters.AddWithValue("@country", SqlDbType.VarChar).Value = TextBox6.Text cmd2.Parameters.AddWithValue("@nat", SqlDbType.VarChar).Value = TextBox7.Text cmd2.Parameters.AddWithValue("@mobile", SqlDbType.VarChar).Value = TextBox8.Text cmd2.Parameters.AddWithValue("@email", SqlDbType.VarChar).Value = TextBox9.Text cmd2.Parameters.AddWithValue("@dept", SqlDbType.VarChar).Value = ComboBox3.Text cmd2.Parameters.AddWithValue("@sub", SqlDbType.VarChar).Value = ComboBox4.Text cmd2.Parameters.AddWithValue("@username", SqlDbType.VarChar).Value = TextBox10.Text cmd2.Parameters.AddWithValue("@password", SqlDbType.VarChar).Value = TextBox11.Text Dim question As String Dim data As Integer question = ComboBox2.Text If question = "Whats your nickname ?" Then data = 5 ElseIf question = "Whats your pet name ?" Then data = 4 ElseIf question = "Whats your birth place ?" Then data = 3 ElseIf question = "Whats your middle name ?" Then data = 2 ElseIf question = "Whos your childhood hero ?" Then data = 1 End If cmd2.Parameters.AddWithValue("@security", SqlDbType.Int).Value = data cmd2.Parameters.AddWithValue("@answer", SqlDbType.VarChar).Value = TextBox13.Text cmd2.Parameters.AddWithValue("@modified", SqlDbType.VarChar).Value = Date.Today Dim ms As New MemoryStream PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat) cmd2.Parameters.AddWithValue("@avatar", SqlDbType.Image).Value = ms.ToArray If cmd2.ExecuteNonQuery() = 1 Then MsgBox("Updated") End If connection.Close() faculty_dgv() End If Catch ex As Exception MsgBox(ex.Message) End Try End Sub
#realJSOP
Во-первых, вы не сказали, какую ошибку GDI вы получаете. Во-вторых, попробуйте поместить блок try/catch вокруг вашего кода, чтобы вы могли определить, где происходит ошибка. В-третьих, узнайте, как использовать функции форматирования на этом прицеле, чтобы нам было легче различать текст вопроса и код.
Babai JermenKeller Sasmal
Я думаю, что вы должны взглянуть на мой вопрос, там четко написано, что я получаю ошибку в 3-й строке (ошибка: общая ошибка произошла в GDI++), и я также считаю, что нет другого способа получить ошибку без блока try catch. Ну, я снова обновляю свой вопрос с исходным кодом.
Babai JermenKeller Sasmal
Вопрос обновляется с исходным кодом, пожалуйста, решите ошибку GDI, которую я получаю. Это проект колледжа, так что я не беспокоюсь о атаке SQL-инъекций.
Jochen Arndt
Возникает ли ошибка в строке AvatarBox.Image.Save(ms,AvatarBox.Image.RawFormat)
?
Это означает, что он содержит недопустимое изображение (или, возможно, пустое изображение), что изображение не может быть сохранено в указанном формате, или у вас есть проблема с потоком.
Но мы не знаем, что такое Аватарбокс, как создается поток и использовался ли он раньше (что не допускается при сохранении изображения в поток), а также Что такое Аватарбокс.Изображение.RawFormat-это (по крайней мере, в стандартном формате изображения).
Наконец несколько советов:
При ответе на комментарий используйте кнопку "ответить". Затем плакат с первоначальным комментарием получает уведомление по электронной почте. Этого не произойдет при публикации комментария к самому вопросу, и Джон, вероятно, не будет периодически проверять ваш вопрос, чтобы увидеть, обновили ли вы его.
Используйте copy & paste для добавления кода к вашему вопросу, а не для ввода кода. Это гарантирует, что мы видим действительно используемый код, а не код, который даже не будет компилироваться, как:ms.ToArrey
Babai JermenKeller Sasmal
AvatarBox-это мой PictureBox1. Было предложено предотвратить sql-атаку. Я попробую сделать то, что вы предлагаете.
Jochen Arndt
Как бы окно с картинками предотвратило атаки SQL?
А как насчет других возможных источников проблем, которые я упомянул в своем комментарии? Не видя соответствующего кода, невозможно помочь.
Даже тогда только вы можете, наконец, узнать это, потому что такие общие ошибки GDI могут возникать по многим причинам.
Babai JermenKeller Sasmal
И спасибо, что рассказали мне о комментировании. Я новичок в codeproject.
Richard Deeming
"SELECT * from [USERDATA] name=@name,dob=@dob,sex=@sex,addr=@addr,phone=@phone,avatar=@avatar WHERE [ID]='" & IDBOX.Text & "'"
Этот код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Вы уже знаете, как использовать параметры - вы делаете это для каждого другого параметра в этом запросе. :)