gpt4 book ai didi

mysql - 使用 BLOB 抛出异常将图像上传到数据库

转载 作者:行者123 更新时间:2023-11-29 03:30:28 25 4
gpt4 key购买 nike

我一直在尝试改编我在网上找到的这个过程的一部分(现在不记得在哪里了!)。我一直在尝试使用它使用 BLOB 数据类型将图像上传到 MYSQL 数据库。

Public Sub SQLUpload()
Dim connection As New MySqlConnection(ConnectionImage)
Dim command As New MySqlCommand("INSERT INTO Images (File, FileName, FileSize) VALUES (@Picture, 'Name1', 'Size1')", connection)

'Create an Image object.'
Using picture As Image = Image.FromFile("C:\DIR\Pictures\Person.jpg")
'Create an empty stream in memory.'
Using stream As New IO.MemoryStream

'Fill the stream with the binary data from the Image.'
picture.Save(Stream, Imaging.ImageFormat.Jpeg)

'Get an array of Bytes from the stream and assign to the parameter.'
command.Parameters.AddWithValue("@Picture", SqlDbType.VarBinary).Value = stream.GetBuffer()
End Using
End Using

connection.Open()
Try
command.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.ToString)
End Try

connection.Close()
End Sub

以上是当前的子例程。每当执行此操作时,例程都会正常运行,直到到达:

Command.ExecuteNonQuery()

它抛出错误:

Unable to cast object of type System.Byte[] to type System.IConvertible

我很确定发生这种情况是因为图像中的字节作为数组返回,但是保存它们的内存不支持数组?这是我从网上其他地方阅读的内容中收集的。

但是,由于这不是我的全部代码,坦率地说,我不确定问题出在哪里。任何人都可以看出它有什么问题吗?

非常感谢

最佳答案

你在哪里

SqlDbType.VarBinary ' <-- this is Sql Server DB type

使用

MySqlDbType.Blob

像这样

Dim file() As Byte = ' set your file
Dim p As MySqlParameter = new MySqlParameter("@Picture", MySqlDbType.Blob, file.Length)
p.Value = file
command.Parameters.Add(p)

正如其他人所提到的,您不需要“保存”您的文件 - 只需将其读入字节数组即可。我的代码如下所示:

Public Sub SQLUpload()

Try
Using conn As New MySqlConnection(connString)
' Parametarize entire sql string
Dim sql As String =
"INSERT INTO Images (File, FileName, FileSize) VALUES (@Picture, @name, @size)"
Using cmd As New MySqlCommand(sql, conn)

Dim fileName As String = "C:\DIR\Pictures\Person.jpg"
Dim file() As Byte = File.ReadAllBytes(fileName)
cmd.Parameters.AddWithValue("@Picture", MySqlDbType.Blob).Value = file
cmd.Parameters.AddWithValue("@file", MySqlDbType.VarChar).Value = fileName
cmd.Parameters.AddWithValue("@size", MySqlDbType.Int32).Value = file.Length

conn.Open()
cmd.ExecuteNonQuery()
End Using

End Using
MessageBox.Show("Success")
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub

关于mysql - 使用 BLOB 抛出异常将图像上传到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31368714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com