【问题标题】:VB.NET: Retrive an image (blob) from MySQL DBVB.NET:从 MySQL DB 中检索图像(blob)
【发布时间】:2013-09-29 10:18:53
【问题描述】:

我在 MySQL DB 中有一个名为“Foto”的字段。该字段是一个 blob。当我使用 SQL Server 时,以下代码有效:

    Dim conn As New MySqlConnection
    conn.ConnectionString = ConnectionString
    Dim cmd As New MySqlCommand
    cmd.Connection = conn
    conn.Open()
    cmd.CommandText = "SELECT Foto FROM MyTable WHERE ID = '" & IDtxt.ToString & "'"
    Dim reader As MySqlDataReader

        reader = cmd.ExecuteReader
        While reader.Read
            If (IsDBNull(reader("Foto"))) Then
                frmCartaIdentitaView.pctImage.Image = Nothing
            Else
                Dim byteImage() As Byte = reader("Foto")
                Dim frmImageView stmFoto As New System.IO.MemoryStream(byteImage)
                frmImageView.pctImage.Image = Image.FromStream(stmFoto)
                frmImageView.pctImage.SizeMode = PictureBoxSizeMode.Zoom
                frmImageView.Show()
            End If
        End While

但是现在我使用mysql,产生了以下错误:参数无效。

【问题讨论】:

  • 您的“ID”字段是字符?不是数字?
  • 我的ID字段是整数。

标签: mysql vb.net image blob memorystream


【解决方案1】:

如果您的 ID 字段是一个整数,请查看这是否可以帮助您解决该错误。而不是这个:

cmd.CommandText = "SELECT Foto FROM MyTable WHERE ID = '" & IDtxt.ToString & "'"

试试这个:

cmd.CommandText = "SELECT Foto FROM MyTable WHERE ID = " & ctype(int32,IDtxt).ToString

【讨论】:

  • 不幸的是,这不是问题
  • 那么也许你可以发布哪一行给你错误和堆栈信息。
  • 问题在于连接,而不是您如何验证/投射 ID。最好使用 int 参数而不是强制转换为 int
【解决方案2】:

我遇到了同样的问题。当 BLOB 列为空时出现此错误,然后 我这样解决了: 抱歉,我现在才发现这篇文章

Dim conn As New MySqlConnection
conn.ConnectionString = ConnectionString
Dim cmd As New MySqlCommand
cmd.Connection = conn
conn.Open()
cmd.CommandText = "SELECT Foto, length(Foto) AS picLen FROM MyTable WHERE ID = '" & IDtxt.ToString & "'"
Dim reader As MySqlDataReader

    reader = cmd.ExecuteReader
    While reader.Read
        If (reader("picLen "))=0 Then
            frmCartaIdentitaView.pctImage.Image = Nothing
        Else
            Dim byteImage() As Byte = reader("Foto")
            Dim frmImageView stmFoto As New System.IO.MemoryStream(byteImage)
            frmImageView.pctImage.Image = Image.FromStream(stmFoto)
            frmImageView.pctImage.SizeMode = PictureBoxSizeMode.Zoom
            frmImageView.Show()
        End If
    End While

【讨论】:

  • 怎么解决的?这与其他原始代码或其他答案有何不同?此外,此代码对 SQL 注入开放,如果ID 为整数,则可能会随机失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 2016-12-26
  • 2015-06-09
相关资源
最近更新 更多