万能的大神们!跪求帮忙啊 vb 图片以二进制形式保存到sqlserver数据库中

时间:2022-10-18 21:44:44
要做一个上传图片的功能,我没做过vb,遇到问题了不会解决,万能的大神们求帮忙啊啊 啊,,, 万能的大神们!跪求帮忙啊 vb 图片以二进制形式保存到sqlserver数据库中
   要求是  先放一个可以编辑图片的控件(因为要连接写字板,写字板上写的字直接成为图片显示在编辑图片的控件上),然后将该图片以二进制的形式保存到数据库中 。然后读取出来显示到界面上 ,,我现在放了一个button,点击按钮模拟上传功能,在获取完图片路径   '读取图片这步时报   未将对象引用到实列化 的错误,大神们帮我看看原因啊,还有有没有什么可以编辑图片的插件推荐,,感激不胜啊万分感谢啊 万能的大神们!跪求帮忙啊 vb 图片以二进制形式保存到sqlserver数据库中      报错位置:  Dim strPath As String = "D:\代理人系统\CLIENTCARGOBOOKING\Resources\88.jpg"

        Dim strPhotoPath As String = System.Web.HttpContext.Current.Server.MapPath(strPath)          '读取图片 这步






以下 是页面完整代码:
Imports System.IO
Imports System.Text
Imports System.RunTime.Serialization.Formatters
Imports System.Data
Imports Cargo.Bus
Imports ime
Imports system.Math

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '图片路径  
        Dim strPath As String = "D:\代理人系统\CLIENTCARGOBOOKING\Resources\88.jpg"

        Dim strPhotoPath As String = System.Web.HttpContext.Current.Server.MapPath(strPath)       '读取图片
        Dim fs As FileStream = New System.IO.FileStream(strPhotoPath, FileMode.Open, FileAccess.Read)
        Dim br As BinaryReader = New BinaryReader(fs)
        Dim photo() As Byte = br.ReadBytes(CType(fs.Length, Integer))
        br.Close()
        fs.Close()
        Dim myConn As SqlClient.SqlConnection = New SqlClient.SqlConnection("Data Source=.;Initial Catalog=JM;User ID=sa;Password=123")
        Dim strComm As String = " INSERT INTO zy(personName, personPhotoPath, personPhoto) "
        strComm = (strComm + (" VALUES('wangwu', '" + (strPath + "', @photoBinary )")))

        Dim myComm As SqlClient.SqlCommand = New SqlClient.SqlCommand(strComm, myConn)
        myComm.Parameters.Add("@photoBinary", SqlDbType.Binary, photo.Length)
        myComm.Parameters("@photoBinary").Value = photo
        myConn.Open()
        myComm.ExecuteNonQuery()
        myConn.Close()
        '3:      .VB把文件存入数据库IMAGE字段()
    End Sub

End Class


只有40分,后面有分了在追加啊 万能的大神们!跪求帮忙啊 vb 图片以二进制形式保存到sqlserver数据库中

3 个解决方案

#1


在VB的ADO对象中有一个Stream 对象是操作二进制数据的,在存储图片到数据库,首先需要将图片数据转换成二进制数据,才能存储在SQL数据库的 image 字段中,在读取二进制数据后,使用 Stream 对象将二进制数据转换为图片,显示在界面。
你的这个程序是VB.NET的,虽然会一点,但没有做过二进制数据转换,VB60做过的不少。

#2


ado要2.5以上版本

#3


给你一个VB60存储图片与读取图片的例子,供你参考,因为SQL语音不论是VB60还是VB2008应该是一样的:
1、声明一个ADODB的Stream对象,在VB60是  Dim Mst As New ADODB.Stream
2、查找、读取硬盘中的图片,存储路径、扩展名
Private Sub Command1_Click()    '使用文件打开对话框查找硬盘图片文件
  On Error GoTo Err
  CommonDialog1.Filter = "JPG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif|BMP文件(*.bmp)|*.bmp|PNG文件(*.png)|*.png"
  CommonDialog1.ShowOpen
  Text2.Text = CommonDialog1.FileName   '得到图片的硬盘路径+文件名+扩展名
  SSR = CommonDialog1.FileTitle   '得到图片的文件名+扩展名
  SSR = Right(SSR, 4)   '得到图片的扩展名,带分隔符“.”
  Command2.Enabled = True
  Exit Sub
Err:
   MsgBox Err.Description    '点击取消按钮会产生错误,显示错误内容
End Sub

3、存储图片到数据库的特定数据表,连接数据库语句略,你可以根据你的数据库连接就可以
  RS.Open "select * from 数据表名称", cn, 3, 2
  RS.AddNew
  RS.Fields("名称") = Text1.Text   '存储由自己设置的图片名称
  Mst.Type = adTypeBinary
  Mst.Open    '打开Mst对象
  If Text2.Text <> "" Then Mst.LoadFromFile Text2.Text   'Mst对象将Text2中的图片内容转换成二进制数据
  RS.Fields("文件") = Mst.Read   '将二进制数据存储在数据表的Image数据类型的字段,这里的字段名称是【文件】
  RS.Fields("扩展名") = SSR      '将图片文件的扩展名存储在这个字段
  RS.Update
  Mst.Close
  RS.Close

4、读取存储在数据表中的二进制图片数据
Image1.Picture = LoadPicture("")
  RS.Open "select * from 数据表名称 order By ID Desc", cn, 2, 2     'SQL语句根据你显示的要求修改即可
      Mst.Type = adTypeBinary
      Mst.Open
      Mst.Write RS.Fields("文件")     'Mst对象读取数据库二进制数据
      Mst.SaveToFile App.Path & "\doc\" & RS.Fields("名称") & RS.Fields("扩展名"), adSaveCreateOverWrite
      'Mst对象将转换的图片文件存储在doc目录中,存储的图片是数据库存储的文件名+扩展名
      Image1.Picture = LoadPicture(App.Path & "\doc\" & RS.Fields("名称") & RS.Fields("扩展名"))
      '在 Image1 控件中将图片显示出来
      Mst.Close
  RS.Close

不是特别复杂,按照这个例子,你应该能够在VB2008中达到预期的要求。
万能的大神们!跪求帮忙啊 vb 图片以二进制形式保存到sqlserver数据库中
这个图片是在VB60中显示的数据表存储的图片截图。

#1


在VB的ADO对象中有一个Stream 对象是操作二进制数据的,在存储图片到数据库,首先需要将图片数据转换成二进制数据,才能存储在SQL数据库的 image 字段中,在读取二进制数据后,使用 Stream 对象将二进制数据转换为图片,显示在界面。
你的这个程序是VB.NET的,虽然会一点,但没有做过二进制数据转换,VB60做过的不少。

#2


ado要2.5以上版本

#3


给你一个VB60存储图片与读取图片的例子,供你参考,因为SQL语音不论是VB60还是VB2008应该是一样的:
1、声明一个ADODB的Stream对象,在VB60是  Dim Mst As New ADODB.Stream
2、查找、读取硬盘中的图片,存储路径、扩展名
Private Sub Command1_Click()    '使用文件打开对话框查找硬盘图片文件
  On Error GoTo Err
  CommonDialog1.Filter = "JPG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif|BMP文件(*.bmp)|*.bmp|PNG文件(*.png)|*.png"
  CommonDialog1.ShowOpen
  Text2.Text = CommonDialog1.FileName   '得到图片的硬盘路径+文件名+扩展名
  SSR = CommonDialog1.FileTitle   '得到图片的文件名+扩展名
  SSR = Right(SSR, 4)   '得到图片的扩展名,带分隔符“.”
  Command2.Enabled = True
  Exit Sub
Err:
   MsgBox Err.Description    '点击取消按钮会产生错误,显示错误内容
End Sub

3、存储图片到数据库的特定数据表,连接数据库语句略,你可以根据你的数据库连接就可以
  RS.Open "select * from 数据表名称", cn, 3, 2
  RS.AddNew
  RS.Fields("名称") = Text1.Text   '存储由自己设置的图片名称
  Mst.Type = adTypeBinary
  Mst.Open    '打开Mst对象
  If Text2.Text <> "" Then Mst.LoadFromFile Text2.Text   'Mst对象将Text2中的图片内容转换成二进制数据
  RS.Fields("文件") = Mst.Read   '将二进制数据存储在数据表的Image数据类型的字段,这里的字段名称是【文件】
  RS.Fields("扩展名") = SSR      '将图片文件的扩展名存储在这个字段
  RS.Update
  Mst.Close
  RS.Close

4、读取存储在数据表中的二进制图片数据
Image1.Picture = LoadPicture("")
  RS.Open "select * from 数据表名称 order By ID Desc", cn, 2, 2     'SQL语句根据你显示的要求修改即可
      Mst.Type = adTypeBinary
      Mst.Open
      Mst.Write RS.Fields("文件")     'Mst对象读取数据库二进制数据
      Mst.SaveToFile App.Path & "\doc\" & RS.Fields("名称") & RS.Fields("扩展名"), adSaveCreateOverWrite
      'Mst对象将转换的图片文件存储在doc目录中,存储的图片是数据库存储的文件名+扩展名
      Image1.Picture = LoadPicture(App.Path & "\doc\" & RS.Fields("名称") & RS.Fields("扩展名"))
      '在 Image1 控件中将图片显示出来
      Mst.Close
  RS.Close

不是特别复杂,按照这个例子,你应该能够在VB2008中达到预期的要求。
万能的大神们!跪求帮忙啊 vb 图片以二进制形式保存到sqlserver数据库中
这个图片是在VB60中显示的数据表存储的图片截图。