Member 13397933 Ответов: 1

Как восстановить изображение из базы данных acces с помощью datareader в VB.NET


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

[удален дубликат кода]

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

 Try

	Dim ms As New System.IO.MemoryStream
	Dim bmpImage As New Bitmap(stphoto.Image)

	bmpImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
	bytImage = ms.ToArray()
	ms.Close()

	Dim con As New OleDb.OleDbConnection
	Dim cmd As New OleDb.OleDbCommand
	Dim sqlstring As String
	Dim query As String
	sqlstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bin\fee.accdb"
	con = New OleDb.OleDbConnection(sqlstring)
	con.Open()
	query = "INSERT INTO smaster ([sid],[sname],[fname],[add],[dob],[class],[college],[session],[cnumber],[gnumber],[photo]) Values (" & sidtxt.Text & ",'" & snametxt.Text & "','" & fnametxt.Text & "','" & addtxt.Text & "','" & dobpick.Value.ToShortDateString & "','" & classcombo.Text & "', '" & collegecombo.Text & "','" & sessioncombo.Text & "','" & mobtxt.Text & "','" & gnumbertxt.Text & "','@bytImage')"

	cmd = New OleDb.OleDbCommand(query, con)
	cmd.ExecuteNonQuery()

	studentid = sidtxt.Text
	studentname = snametxt.Text
	'code for opening add subject form

	Dim result As Integer = MessageBox.Show("Master Data Saved, Please Click OK for adding Subjects", "Student Data", MessageBoxButtons.OK)
	If result = DialogResult.OK Then
		addsub.Show()
	End If
Catch ex As Exception
	MessageBox.Show(ex.Message)
End Try

Graeme_Grant

Вы вытаскиваете его так же, как и вставляете.

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

Member 13397933

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

1 Ответов

Рейтинг:
0

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

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

И если вы использовали конкатенацию строк для вставки своих изображений, что ж, у вас есть еще одна проблема. Все они-мусор, и вы не можете их извлечь...
Видеть здесь: Почему я получаю " параметр недопустим." исключение, когда я читаю изображение из своей базы данных?[^]- весь код написан на C#, но он довольно прост, и онлайн-конвертеры могут изменить его, если вы не справитесь.