簡體   English   中英

將圖像從 MySQL 數據庫獲取到 PictureBox(vb.net)時出現“參數無效”錯誤

[英]Getting error as “Parameter is not valid” while fetching image from MySQL database to PictureBox (vb.net)

我拿了一個 DataGridView 並在 MouseClick 上從數據庫表“產品”的“pimg”列中獲取數據。
我參考了這個鏈接https://www.sourcecodester.com/tutorials/visual-basic-net/12592/how-retrieve-image-mysql-database-using-vbnet.html
當我嘗試在圖片框中顯示獲取的圖像時,它會顯示錯誤為“參數無效”

Private Sub DataGridViewdb_MouseClick(sender As Object, e As MouseEventArgs) Handles DataGridViewdb.MouseClick
        Dim connection As New MySqlConnection("datasource=localhost;port=3306;username=root;password=;database=id12302075_bdukan")
        Dim da As New MySqlDataAdapter
        Try
            Dim i As Integer
            i = DataGridViewdb.CurrentRow.Index
            Me.Labelid.Text = DataGridViewdb.Item(0, i).Value
            Me.TextBoxpid.Text = DataGridViewdb.Item(1, i).Value
            Me.TextBoxcid.Text = DataGridViewdb.Item(2, i).Value
            Me.TextBoxuid.Text = DataGridViewdb.Item(3, i).Value
            Me.TextBoxpname.Text = DataGridViewdb.Item(4, i).Value
            Me.TextBoxpyprice.Text = DataGridViewdb.Item(5, i).Value
            Me.TextBoxpprice.Text = DataGridViewdb.Item(6, i).Value
            Me.TextBoxpweight.Text = DataGridViewdb.Item(7, i).Value
            Me.TextBoxpstock.Text = DataGridViewdb.Item(8, i).Value

            connection.Open()

            Dim cmd = New MySqlCommand("select pimg from products where id='" &
              DataGridViewdb.Item(0, i).Value & "'", connection)


            Dim dt As New DataTable

            Dim arrImage() As Byte

            da.SelectCommand = cmd
            da.Fill(dt)

            arrImage = dt.Rows(0).Item(0)
            Dim mstream As New System.IO.MemoryStream(arrImage)
            PictureBox1.Image = Image.FromStream(mstream)



        Catch ex As Exception
            MessageBox.Show(ex.Message)
            da.Dispose()
            connection.Close()

        End Try

    End Sub

在此處輸入圖像描述

我將DataGridView1的名稱更改為DataGridViewdb ,以便與我的測試程序匹配。 我遺漏了對文本框的分配,例如它不是您問題的一部分。

Using...End Using塊將負責關閉和處置您的數據庫對象,即使出現錯誤也是如此。

始終使用參數。 它有助於避免 sql 注入並使您的 sql 命令更易於編寫(無需處理單引號)。 它還有助於讓您了解潛在的類型不匹配。 我猜到了你的 id 字段的數據類型。 檢查您的數據庫並相應地調整代碼。 通過連接 sql 命令,您將傳遞一個帶有單引號的字符串。 大多數 id 字段都是整數。

由於您只檢索單行中的單列,因此可以使用.ExecuteScalar

Private Sub DataGridView1_MouseClick(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseClick
    Dim i = DataGridView1.CurrentRow.Index
    Dim b As Object
    Using connection As New MySqlConnection("datasource=localhost;port=3306;username=root;password=;database=id12302075_bdukan"),
            cmd As New MySqlCommand("select pimg from products where id= @id;", connection)
        cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = CInt(DataGridView1.Item(0, i).Value)
        connection.Open()
        b = cmd.ExecuteScalar
    End Using
    Dim arrImage = CType(b, Byte())
    Dim mstream As New System.IO.MemoryStream(arrImage)
    PictureBox1.Image = Image.FromStream(mstream)
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM