Извлечение фотографий из SQL db on VB.NET форма windows
Привет ребята я пытаюсь загрузить фотографии в базу данных sql а затем получить их в поле изображения в другой форме windows в vb.net . Но я получаю исключение, параметр не валиден, я перепробовал все методы, найденные в интернете, но ничего не работает. Вот код для загрузки. загрузка работает, потому что в базе данных у меня есть таблица, где у меня есть столбец с именем Photo with datatype Image, и я могу видеть, как он обновляется соответственно с байтом, подобным этому ниже. 0xFFD8FFE000104A4649460001010100600......
Try Fill() con = New SqlConnection(cs) con.Open() Dim ck As String = "insert into [Products]([Product Code],[Product Name],[Price],[Discount],[VAT],[Quantity],[photo]) VALUES ('" & txtID.Text & "','" & txtProductName.Text & "','" & txtSellingPrice.Text & "','" & txtDiscount.Text & "', '" & txtVAT.Text & "','" & txtOpeningStock.Text & "',@d2)" cmd = New SqlCommand(ck) With { .Connection = con } ' Prepare command for repeated execution cmd.Prepare() ' Data to be inserted For Each row As DataGridViewRow In dgw.Rows If Not row.IsNewRow Then Dim ms As New MemoryStream() Dim img As Image = row.Cells(0).Value Dim bmpImage As New Bitmap(img) bmpImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg) Dim outbytes(CInt(ms.Length - 1)) As Byte ms.Seek(0, SeekOrigin.Begin) ms.Read(outbytes, 0, CInt(ms.Length)) Dim q As New SqlParameter("@d2", SqlDbType.Image) q.Value = outbytes cmd.Parameters.Add(q) cmd.ExecuteNonQuery() ms.Close() cmd.Parameters.Clear() End If Next con.Close() lblUser.Text = Login_Form.txtUserid.Text LogFunc(lblUser.Text, "added the new Product '" & txtProductName.Text & "' having Product code '" & txtProductCode.Text & "'") MessageBox.Show("Successfully saved", "Product Record", MessageBoxButtons.OK, MessageBoxIcon.Information) auto() con.Close() Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try
вот код для извлечения фотографии.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim cn As New SqlConnection() cn.ConnectionString = cs Try Dim sql As String = "Select [Photo] from login where [User Name] = @d1" Dim cmd As New SqlCommand(sql, cn) cn.Open() cmd.Parameters.AddWithValue("@d1", TextBox1.Text) Dim stream As New MemoryStream() Dim image As Byte() = DirectCast(cmd.ExecuteScalar(), Byte()) stream.Write(image, 0, image.Length) cn.Close() Dim bitmap As New Bitmap(stream) ' <==The exception is being thrown here. PictureBox1.Image = bitmap Catch ex As Exception MessageBox.Show(ex.Message) End Try
Что я уже пробовал:
Try Dim sql As String = "Select [Photo] from login where [User Name] = @d1" Dim cmd As New SqlCommand(sql, cn) cn.Open() cmd.Parameters.AddWithValue("@d1", TextBox1.Text) Dim stream As New MemoryStream() Dim image As Byte() = DirectCast(cmd.ExecuteScalar(), Byte()) stream.Write(image, 0, image.Length) cn.Close() Dim bitmap As New Bitmap(stream) ' <==The exception is being thrown PictureBox1.Image = bitmap Catch ex As Exception MessageBox.Show(ex.Message) End Try
но это не работает
F-ES Sitecore
Это всего лишь идея но попробуйте установить положение потока равным 0
течение.Запись(изображение, 0, изображение.Длина)
течение.Позиция = 0