VB.NET向MySQL插入Blob图片时触发Fatal Error问题求助
解决VB.NET插入MySQL Blob字段时的致命错误问题
你遇到的问题核心是Blob字段写入失败,去掉图片列后正常执行,说明问题出在图片数据的处理或数据库配置上,以下是针对性的排查和解决步骤:
1. 确认数据库字段类型
Resim字段如果用的是BLOB类型,最大仅能存储64KB数据,绝大多数图片都会超过这个限制,直接导致写入时触发致命错误。请将字段类型修改为**LONGBLOB**(最大支持4GB存储),这是此类问题最常见的诱因。
2. 修正MemoryStream的使用方式
当前代码未正确处理MemoryStream资源,且直接使用RawFormat可能引发格式兼容问题,建议改用Using语句自动释放资源,并强制转换为通用图片格式(如PNG):
Public Sub StokKartiKayit() Try BaglantiKontrol() Dim StokAd As String = StokKartiTanimForm.txtStokAdi.Text.ToUpper ' 先判断图片是否存在,避免空引用错误 If StokKartiTanimForm.PictureBox1.Image Is Nothing Then MsgBox("Lütfen bir resim seçiniz!", vbExclamation, "MoTap") Return End If ' 使用Using语句自动释放MemoryStream资源 Using ms As New MemoryStream() ' 强制保存为PNG格式,规避RawFormat的兼容问题 StokKartiTanimForm.PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png) ms.Position = 0 ' 重置流位置到开头(好习惯,避免潜在问题) cmd = New MySqlCommand("INSERT INTO stok_karti_tbl (KategoriID,ParcaID,StokAdi,Resim) Values(@Kategori,@Parca,@Stok,@img)", con) cmd.Parameters.Add("@Kategori", MySqlDbType.Int32).Value = UrunKategoriID cmd.Parameters.Add("@Parca", MySqlDbType.Int32).Value = ParcaID cmd.Parameters.Add("@Stok", MySqlDbType.VarChar).Value = StokAd cmd.Parameters.Add("@img", MySqlDbType.LongBlob).Value = ms.ToArray() con.Open() If cmd.ExecuteNonQuery() = 1 Then MsgBox("Stok Kartı Bilgileri Kayıt Edilmiştir...", vbInformation, "MoTap") Else MsgBox("Kayıt İşleminde Sorun Oluştu...", vbCritical, "MoTap") End If con.Close() End Using Catch ex As Exception ' 输出完整异常信息,包含堆栈跟踪,方便精准定位问题 MsgBox(ex.ToString(), vbCritical, "Hata Detayı") End Try End Sub
3. 调整MySQL连接字符串配置
默认的MySQL连接字符串可能限制了数据包大小,导致大Blob无法传输。请在连接字符串中添加数据包大小配置(示例为10MB,可根据图片实际大小调整):
Server=你的服务器地址;Database=你的数据库名;Uid=用户名;Pwd=密码;Max Packet Size=10485760;
4. 验证图片数据合法性
- 确认图片文件未损坏,可尝试用画图工具重新保存图片后再测试
- 避免使用ICO、WMF等特殊格式,优先选择PNG/JPG这类通用图片格式
内容的提问来源于stack exchange,提问作者mehmet çelik
相关产品推荐
相关产品推荐

