我在將一些JPG或PNG圖像插入MySQL時遇到問題。其中一些圖像已損壞。在MySQL中插入PNG或JPG會破壞圖像
截圖腐敗的JPG:
腐敗PNG的截圖:
什麼是錯我的代碼?
代碼:
Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click
Dim cmd As New MySqlCommand
Dim SQL As String
Dim FileSize As UInt32
Dim rawData() As Byte = IO.File.ReadAllBytes(ListBox1.SelectedItem)
Dim fs As FileStream
Try
fs = New FileStream(ListBox1.SelectedItem.ToString, FileMode.Open, FileAccess.Read)
FileSize = fs.Length
rawData = New Byte(FileSize) {}
fs.Read(rawData, 0, FileSize)
'fs.Close()
MysqlConn.Open()
SQL = "INSERT INTO xcollectibles.foto (foto) VALUES(@foto)"
cmd.Connection = MysqlConn
cmd.CommandText = SQL
cmd.Parameters.AddWithValue("@foto", rawData)
cmd.ExecuteNonQuery()
fs.Close()
MessageBox.Show("File Inserted into database successfully!",
"Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
MysqlConn.Close()
Catch ex As Exception
MessageBox.Show("There was an error: " & ex.Message, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
我也曾嘗試:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MysqlConn.Open()
Me.Cursor = Cursors.WaitCursor
For i = 0 To Me.ListBox1.Items.Count - 1
ProgressBar1.Maximum = Me.ListBox1.Items.Count - 1
Me.ListBox1.SetSelected(i, True)
Dim cmd As New MySqlCommand
Dim SQL As String
Dim filesize As UInt32
Dim mstream As New System.IO.MemoryStream()
If TextBox1.Text = ".jpg" Then
PictureBox1.Image.Save(mstream, Imaging.ImageFormat.Jpeg)
ElseIf TextBox1.Text = ".png" Then
PictureBox1.Image.Save(mstream, Imaging.ImageFormat.Png)
ElseIf TextBox1.Text = ".bmp" Then
PictureBox1.Image.Save(mstream, Imaging.ImageFormat.Png)
End If
'Dim bmp As New Bitmap(Width, Height)
'Dim g As Graphics = Graphics.FromImage(bmp)
'g.Clear(Color.Transparent)
'bmp.Save(mstream, System.Drawing.Imaging.ImageFormat.Png)
'End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim arrImage() As Byte = mstream.GetBuffer()
filesize = mstream.Length
mstream.Close()
SQL = "INSERT INTO xcollectibles.foto (id_product,foto) VALUES ((Select id from xcollectibles.product where product.name='" & ComboBox1.Text & "'), @foto) "
ProgressBar1.Value = i
cmd.Connection = MysqlConn
cmd.CommandText = SQL
cmd.Parameters.AddWithValue("@foto", arrImage)
cmd.ExecuteNonQuery()
Next
MessageBox.Show("File Inserted into database successfully!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
MysqlConn.Dispose()
ProgressBar1.Value = 0
Me.Cursor = Cursors.Default
End Sub
我現在嘗試不同的東西.... 保存在計算機裏的路徑的文件,並保存mysql中的路徑
我試試這個添加文件
System.IO.Directory.CreateDirectory("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images" & "\" & ComboBox1.Text)
Dim SaveFile As New System.IO.StreamWriter("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images" & "\" & ComboBox1.Text & "\" & TextBox3.Text)
If TextBox1.Text = ".jpg" Then
PictureBox1.Image.Save("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images\mypic.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
ElseIf TextBox1.Text = ".bmp" Then
PictureBox1.Image.Save("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images\mypic.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
ElseIf TextBox1.Text = ".png" Then
PictureBox1.Image.Save("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images\mypic.png", System.Drawing.Imaging.ImageFormat.Png)
End If
但我想節約用
System.IO.Directory.CreateDirectory("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images" & "\" & ComboBox1.Text)
該文件夾中的文件和文件與TextBox3.Text
Dim SaveFile As New System.IO.StreamWriter("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images" & "\" & ComboBox1.Text & "\" & TextBox3.Text)
的名字,因爲與保存的
的爲例PictureBox1.Image.Save("C:\Users\Jamyz\Source\Repos\xCollectibles\xCollectibles\xCollectibles\Images\mypic.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
該文件被覆蓋........
非常感謝您.......
_「我的代碼有什麼問題???」_ - 除了事實上,你試圖把圖像放入數據庫中的第一位,你的意思是?圖像屬於文件系統,而不是數據庫。 – CBroe
@CBroe:這是不正確的,根本沒有什麼幫助。儘管如此,在設計新應用程序時應該記住一條經驗法則。 –
我認爲這個問題很簡單。你不應該在數據庫中使用圖像!特別是你的圖像看起來是高分辨率的,因此它會被破壞,因爲你可能無法將所有字節保存到數據庫中。試試用16 * 16px的圖標,你會發現它可能有效。 – Mederic