【发布时间】:2011-04-01 16:28:28
【问题描述】:
我有一个包含显示图像名称列表的列表框的表单。绑定了 到数据库表。单击图像名称时,它会显示图像和 imagename 分别在图片框和文本框中。未选择图像时 在列表框中,可以通过在列表框中浏览新图像来插入新记录 图片框由 openfiledialog,在文本框中写入图像名称和 按 OK 按钮。当一个图像已经被选中时,记录可以是 按相同的 OK 按钮更新。数据保存到 MSSQL Server 2005. 对应的表字段是 Keycode int autono, logoname nvarchar(50),标志图像。 现在的问题是,当我插入带有图像的新数据时,一切正常 但是每当我尝试用图像更新现有数据时,它都会抛出一个 异常-“GDI+ 中发生一般错误。”在以下行 - 'pic.Image.Save(ms, pic.Image.RawFormat)'。令人惊讶的是,当我更新 图片框中没有任何图像的现有数据不会生成异常。 我已经检查过了,似乎问题只是在某一点上- '从图片框更新图像'。 我几乎全部完成,但坚持这一点。请帮忙。问候。
我的代码通过确定按钮插入/更新数据并通过列表框填充它 双击如下:
私有 ms 作为 MemoryStream 私有 arrImage() 作为字节 私有连接作为 SqlConnection 私有 cmd 作为 SqlCommand Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 MyBase.Load '绑定列表框的方法。 BindListBox(lst, "Select Keycode,LogoName from tbltest", "Logoname", "keycode") 标签 = “插入” 结束子 Private Sub lst_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) 处理 lst.DoubleClick 作为 SqlDataReader 的暗淡博士 dr = CreateReader("Select LogoName,logo from tblTest where keycode=" & lst.SelectedValue) If dr.Read Then txtLogoName.Text = vbNullString & dr("Logoname") If Not IsDBNull(dr("Logo")) Then arrImage = CType(dr("Logo"), Byte()) ms = 新的 MemoryStream(arrImage) pic.Image = Image.FromStream(ms) ms.Close() 别的 pic.Image = 没有 pic.Invalidate() 万一 标签 = “更新” 万一 博士关闭() 关闭连接() arrImage = 没有 ms = 无 结束子 Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 btnOk.Click 将 com 调暗为 SqlCommand 将 strSql 调暗为字符串 如果标签 = “插入” 那么 strSql = "插入 tbltest (logoname,logo) 值 ('" & Trim(txtLogoName.Text) & "',@Logo)" 别的 strSql = "更新 tbltest set logoname='" & Trim(txtLogoName.Text) & "',Logo=@Logo where keycode=" & lst.SelectedValue 万一 com = CreateCommand(strSql) com.Parameters.Add(New SqlParameter("@Logo", SqlDbType.Image)) If Not pic.Image is nothing then ms = 新的 MemoryStream() pic.Image.Save(ms, pic.Image.RawFormat) arrImage = ms.GetBuffer ms.Close() 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) 结束子 公共子集连接() 尝试 conn = New SqlConnection("数据源=MyServer;初始目录=TestDB;用户ID=sa;密码=;") conn.Open() 抓住前任作为例外 消息框(例如消息) 结束尝试 结束子 公共子 closeconnection() 连接关闭() 结束子 公共函数 CreateCommand(ByVal 查询作为字符串)作为 SqlCommand 设置连接() 暗淡命令作为新的 SqlCommand(query, conn) 返回命令 结束功能 公共函数 CreateReader(ByVal query As String) As SqlDataReader 昏暗阅读器作为 SqlDataReader 设置连接() cmd = CreateCommand(查询) 阅读器 = cmd.ExecuteReader() 返回读者 结束功能【问题讨论】:
-
你到底想做什么?您想将图像保存到数据库还是遇到其他问题?