Страница: 1 |
Страница: 1 |
Вопрос: Как рисунок загрузить в SQL-ную базу
Добавлено: 19.06.07 11:08
Автор вопроса: ДенисЧ
Подсажите пж. как имеющееся изображение (напр. tif файлик) загрузить в существующую SQL базу и потом показать на форме в picturebox.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Vugar Miriyev
ICQ: 321950466
Вопросов: 24
Ответов: 28
Web-сайт:
Профиль | | #1
Добавлено: 26.06.07 15:35
'Проц для загрузки файла на сревер
Private Sub SavePhoto(ByVal id As Int16)
Try
 im cn As New SqlConnection
 im myStream As Stream
 im openFileDialog1 As New OpenFileDialog
cn = SQLProjConnect()
 im cmd As New SqlCommand("UPDATE Customers SET Photo = @BLOBData WHERE (CustomerID = " & id & "", cn)
 im strBLOBFilePath As String ' "H:\Pictures\010802_imac[1].jpg"
openFileDialog1.InitialDirectory = "c:\"
openFileDialog1.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF"
openFileDialog1.FilterIndex = 2
openFileDialog1.RestoreDirectory = True
openFileDialog1.Multiselect = False
If openFileDialog1.ShowDialog() = DialogResult.OK Then
'myStream = openFileDialog1.OpenFile()
strBLOBFilePath = openFileDialog1.FileName
 im fsBLOBFile As New FileStream(strBLOBFilePath, FileMode.Open, FileAccess.Read)
If Not (fsBLOBFile Is Nothing) Then
' Insert code to read the stream here.
'myStream.Close()
 im bytBLOBData(fsBLOBFile.Length() - 1) As Byte
fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length)
fsBLOBFile.Close()
 im prm As New SqlParameter("@BLOBData", SqlDbType.VarBinary, _
bytBLOBData.Length, ParameterDirection.Input, False, _
0, 0, Nothing, DataRowVersion.Current, bytBLOBData)
cmd.Parameters.Add(prm)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
End If
End If
Catch fillException As System.Exception
Console.Write(fillException.Message)
Throw fillException
Finally
'Turn constraint checking back on.
End Try
End Sub
'Показать фото в пик4ебоске PhotoPB
Sub LoadPhoto(ByVal DR As DataRow)
 im bytBLOBData() As Byte
If IsDBNull(DR("Photo") Then
PhotoPB.Image = Nothing
Else
bytBLOBData = DR("Photo"
 im stmBLOBData As New MemoryStream(bytBLOBData)
PhotoPB.Image = Image.FromStream(stmBLOBData)
End If
End Sub
Номер ответа: 2
Автор ответа:
ДенисЧ
Вопросов: 25
Ответов: 32
Профиль | | #2
Добавлено: 27.06.07 10:03
Спасибо за участие Vugar Miriyev, однако при попытке считать картинку из базы пишет invalid parametr на строке PhotoPB.Image = Image.FromStream(stmBLOBData).
Может в базу чет не то пишется?
Номер ответа: 3
Автор ответа:
Vugar Miriyev
ICQ: 321950466
Вопросов: 24
Ответов: 28
Web-сайт:
Профиль | | #3
Добавлено: 27.06.07 13:43
Продебугируй dataraw DR, или пропиши свой листинг.
P.S. Кстати если есть сомнения в формате записываемых данных сбрось куданить на жесткий диск и проверь что у тебя там сохраняется. Мой листинг рабочий на все 100% из существующего проекта.
Номер ответа: 4
Автор ответа:
Viktor
Вопросов: 2
Ответов: 18
Профиль | | #4
Добавлено: 02.07.07 15:00
Private Sub ImageReSave()
Dim binReader As New IO.BinaryReader(File.Open(***Old_FilePath***, FileMode.Open))
Dim binWriter As New IO.BinaryWriter(File.Open(***New_FilePath***,FileMode.OpenOrCreate))
 im mText() As Byte
Me.Cursor = Cursors.WaitCursor
binReader.BaseStream.Seek(0, SeekOrigin.Begin)
Try
mText = binReader.ReadBytes(binReader.BaseStream.Length)
binWriter.Write(mText)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error Reading File", MessageBoxButtons.OK, MessageBoxIcon.Information)
Finally
binReader.Close()
binWriter.Close()
Me.Cursor = Cursors.Default
End Try
End Sub
Этот пример написал для примера как вообще считать файл и сохранить. Ну а когда мне надо было сохранить картинку (или любой другой файл) в Базе Данных, то переменную mText я записывал целиком в поле типа "Memo" или "LongBinary". Работает быстро.
Номер ответа: 5
Автор ответа:
ДенисЧ
Вопросов: 25
Ответов: 32
Профиль | | #5
Добавлено: 10.07.07 12:39
Привет Vugar Miriyev, еще раз спасибо за участие. Сохраняет путь к файлу, хотя когда читает файл в поток размер показывает правильный.
Теперь к помощи Виктора.
строка
Dim binReader As New IO.BinaryReader(File.Open(***Old_FilePath***, FileMode.Open))
ругается Access to the path ...путь к файлу к-рый указал... is denied
Номер ответа: 6
Автор ответа:
Vugar Miriyev
ICQ: 321950466
Вопросов: 24
Ответов: 28
Web-сайт:
Профиль | | #6
Добавлено: 10.07.07 12:55
Проверь формат поля в SQL куда записываешь файл, должен быть image.
Номер ответа: 7
Автор ответа:
ДенисЧ
Вопросов: 25
Ответов: 32
Профиль | | #7
Добавлено: 10.07.07 15:44
Да image - нашел ошибку в команде INSERT писал зачем-то путь, но чё туда вставить (вернее как туда вставить стрим) не понял - все либо ругается, либо не пишет ничего. Stream заполняется - для проверки заполняю пикчербокс из стрима.