如何使用vb.net在mysql中存储二进制数据?

时间:2014-02-04 17:39:22

标签: mysql vb.net

正在构建一个简单的程序,帮助人们浏览图像并将其保存在mysql数据库中。在vb.net中保存图片时遇到大麻烦,非常感谢您的帮助...

Imports System.IO
Public Class frmSalesManager

Private Sub frmSalesManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
    OpenFileDialog1.Filter = "image file (*.jpg, *.bmp, *.png) | *.jpg; *.bmp; *.png| all files (*.*) | *.* "
    If OpenFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
        PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
    End If
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim fsreader As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
    Dim breader As New BinaryReader(fsreader)
    Dim imgbuffer(fsreader.Length) As Byte
    breader.Read(imgbuffer, 0, fsreader.Length)
    fsreader.Close()
    strsql = "Insert into Test (name, picture) VALUES (@name, @picture)"
    acsmd.CommandText = strsql

    acsmd.Connection = con
    acsmd.Parameters.AddWithValue("@name", txtname.Text)
    acsmd.Parameters.AddWithValue("@picture", imgbuffer)
    'acsmd.ExecuteNonQuery()
    acsmd.Dispose()
    MsgBox("Saved")


End Sub

Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    If OpenFileDialog1.FileName <> Nothing Or OpenFileDialog1.FileName <> "" Then
        txtname.Text = OpenFileDialog1.FileName.Substring( _
OpenFileDialog1.FileName.LastIndexOf("\") + 1, _
(OpenFileDialog1.FileName.IndexOf(".", 0) - (OpenFileDialog1.FileName.LastIndexOf("\") + 1)))
        End If
    End Sub
End Class

2 个答案:

答案 0 :(得分:0)

我希望con是一个Open连接...尝试使用Button1_Click

的代码
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim imgbuffer() As Byte
        Using fsreader As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
            ReDim imgbuffer(fsreader.Length - 1)
            Using breader As New BinaryReader(fsreader)
                breader.Read(imgbuffer, 0, fsreader.Length)
            End Using
        End Using

        strsql = "Insert into Test (name, picture) VALUES (@name, @picture)"
        acsmd.CommandText = strsql

        acsmd.Connection = con
        acsmd.Parameters.AddWithValue("@name", txtname.Text)
        acsmd.Parameters.AddWithValue("@picture", imgbuffer)
        acsmd.ExecuteNonQuery()
        acsmd.Dispose()
        MsgBox("Saved")
    End Sub

答案 1 :(得分:0)

二进制数据可以存储在BLOB字段的MySQL数据库中。 BLOB是一个二进制大对象,可以容纳可变数量的数据。

  • 简短的二进制数据,例如密码哈希,只需对它们进行base64编码并将结果字符串存储为VARCHAR即可正常工作
  • “非二进制”数据,例如偶尔不可打印的文档snipplet可以转义并作为字符串存储
  • BLOB数据类型允许您存储任意数据块的二进制数据,但我强烈建议不要使用它:将数据存储在文件中,然后以String类型存储文件的路径。从存储二进制数据中获得的一切都没有,数据库在数据库中没有“理解”。

Source