gpt4 book ai didi

vb.net - 将图片从图片框保存到数据库时出现问题。 VB.Net 2008. 框架 3.5

转载 作者:行者123 更新时间:2023-12-04 06:47:45 26 4
gpt4 key购买 nike

我有一个包含显示图像名称列表的列表框的表单。绑定(bind)了
到数据库表。单击图像名称时,它会显示图像并
imagename 分别在图片框和文本框中。未选择图像时
在列表框中,可以通过浏览列表中的新图像插入新记录
通过 openfiledialog 的图片框,在文本框中写入图像名称和
按确定按钮。当已经选择了图像时,可以将记录
通过按相同的 OK 按钮更新。数据保存到 MSSQL Server
2005.对应的表字段是Keycode int autono,
logoname nvarchar(50),标志图像。
现在的问题是,当我插入带有图像的新数据时,一切正常
但是每当我尝试使用图像更新现有数据时,它都会抛出一个
异常-“GDI+ 中发生一般错误。”在下一行-
'pic.Image.Save(ms, pic.Image.RawFormat)'。令人惊讶的是,当我更新
图片框中没有任何图像的现有数据不会生成异常。
我已经检查过了,似乎问题只是在某一点-
'从图片框更新图像'。
我几乎完成了所有工作,但坚持这一点。请帮忙。问候。

我的代码通过“确定”按钮插入/更新数据并通过列表框填充它
双击如下:

私有(private) ms 作为 MemoryStream
私有(private) arrImage() 作为字节
私有(private)连接作为 SqlConnection
私有(private) cmd 作为 SqlCommand

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 MyBase.Load
'绑定(bind)列表框的方法。
BindListBox(lst, "Select Keycode,LogoName from tbltest", "Logoname", "keycode")
标签 = "插入"
结束子

Private Sub lst_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) 处理 lst.DoubleClick
Dim dr As SqlDataReader

dr = CreateReader("Select LogoName,logo from tblTest where keycode="& lst.SelectedValue)
如果博士阅读那么
txtLogoName.Text = vbNullString & dr("Logoname")
如果不是 IsDBNull(dr("Logo")) 然后
arrImage = CType(dr("Logo"), Byte())
ms = 新的内存流(arrImage)
pic.Image = Image.FromStream(ms)
女士关闭()
别的
pic.Image = 没有
pic.Invalidate()
万一
标签 = "更新"
万一
博士.Close()
关闭连接()
arrImage = 无
ms = 没有
结束子

Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 btnOk.Click
Dim com 作为 SqlCommand
Dim strSql 作为字符串

If Tag = "Insert"Then
strSql = "插入 tbltest (logoname,logo) 值 ('"& Trim(txtLogoName.Text) & "',@Logo)"
别的
strSql = "Update tbltest set logoname='"& Trim(txtLogoName.Text) & "',Logo=@Logo Where keycode="& lst.SelectedValue
万一

com = CreateCommand(strSql)
com.Parameters.Add(New SqlParameter("@Logo", SqlDbType.Image))
如果不是 pic.Image 什么都不是
ms = 新的内存流()
pic.Image.Save(ms, pic.Image.RawFormat)
arrImage = ms.GetBuffer
女士关闭()
com.Parameters("@Logo").Value = arrImage
别的
com.Parameters("@Logo").Value = DBNull.Value
万一

如果 com.ExecuteNonQuery = 1 那么
关闭连接()
BindListBox(lst, "Select Keycode,LogoName from tbltest", "Logoname", "keycode")
pic.Image = 没有
pic.Invalidate()
txtLogoName.Clear()
标签 = "插入"
万一

arrImage = 无
ms = 没有
strSql = 没有
结束子

Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 btnBrowse.Click
与 dlg
.Filter = "所有文件|*.*|位图|*.bmp|GIF|*.gif|图标|*.ico|JPEG|*.jpg|PNG|*.png"
.FilterIndex = 5
结束于

如果 dlg.ShowDialog() = DialogResult.OK 然后 pic.Image = Image.FromFile(dlg.FileName)
结束子

公共(public)子集连接()
尝试
conn = New SqlConnection("Data Source=MyServer;Initial Catalog=TestDB;User Id=sa;Password=;")
连接.Open()
Catch ex 作为异常(exception)
MsgBox(例如Message)
结束尝试
结束子

公共(public)子 closeconnection()
conn.Close()
结束子

公共(public)函数 CreateCommand(ByVal query As String) As SqlCommand
设置连接()
Dim 命令作为新的 SqlCommand(query, conn)
返回命令
结束函数

公共(public)函数 CreateReader(ByVal query As String) As SqlDataReader
Dim reader As SqlDataReader
设置连接()
cmd = 创建命令(查询)
阅读器 = cmd.ExecuteReader()
返回读者
结束函数

最佳答案

帮自己一个大忙,将您的图像作为单独的文件保存在数据库之外的共享网络驱动器上。仅将文件名存储在数据库中。

这有两个好处:调试您的图像文件会容易得多,并且您的数据库会更小并且运行得更快。

2019年更新:

此链接中还描述了用于存储基于文件的数据的 Sql Server 选项:https://docs.microsoft.com/en-us/sql/relational-databases/blob/compare-options-for-storing-blobs-sql-server?view=sql-server-ver15

关于vb.net - 将图片从图片框保存到数据库时出现问题。 VB.Net 2008. 框架 3.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com