要求是 先放一个可以编辑图片的控件(因为要连接写字板,写字板上写的字直接成为图片显示在编辑图片的控件上),然后将该图片以二进制的形式保存到数据库中 。然后读取出来显示到界面上 ,,我现在放了一个button,点击按钮模拟上传功能,在获取完图片路径 '读取图片这步时报 未将对象引用到实列化 的错误,大神们帮我看看原因啊,还有有没有什么可以编辑图片的插件推荐,,感激不胜啊万分感谢啊 报错位置: 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分,后面有分了在追加啊
3 个解决方案
#1
在VB的ADO对象中有一个Stream 对象是操作二进制数据的,在存储图片到数据库,首先需要将图片数据转换成二进制数据,才能存储在SQL数据库的 image 字段中,在读取二进制数据后,使用 Stream 对象将二进制数据转换为图片,显示在界面。
你的这个程序是VB.NET的,虽然会一点,但没有做过二进制数据转换,VB60做过的不少。
你的这个程序是VB.NET的,虽然会一点,但没有做过二进制数据转换,VB60做过的不少。
#2
ado要2.5以上版本
#3
给你一个VB60存储图片与读取图片的例子,供你参考,因为SQL语音不论是VB60还是VB2008应该是一样的:
1、声明一个ADODB的Stream对象,在VB60是 Dim Mst As New ADODB.Stream
2、查找、读取硬盘中的图片,存储路径、扩展名
3、存储图片到数据库的特定数据表,连接数据库语句略,你可以根据你的数据库连接就可以
4、读取存储在数据表中的二进制图片数据
不是特别复杂,按照这个例子,你应该能够在VB2008中达到预期的要求。
这个图片是在VB60中显示的数据表存储的图片截图。
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中达到预期的要求。
这个图片是在VB60中显示的数据表存储的图片截图。
#1
在VB的ADO对象中有一个Stream 对象是操作二进制数据的,在存储图片到数据库,首先需要将图片数据转换成二进制数据,才能存储在SQL数据库的 image 字段中,在读取二进制数据后,使用 Stream 对象将二进制数据转换为图片,显示在界面。
你的这个程序是VB.NET的,虽然会一点,但没有做过二进制数据转换,VB60做过的不少。
你的这个程序是VB.NET的,虽然会一点,但没有做过二进制数据转换,VB60做过的不少。
#2
ado要2.5以上版本
#3
给你一个VB60存储图片与读取图片的例子,供你参考,因为SQL语音不论是VB60还是VB2008应该是一样的:
1、声明一个ADODB的Stream对象,在VB60是 Dim Mst As New ADODB.Stream
2、查找、读取硬盘中的图片,存储路径、扩展名
3、存储图片到数据库的特定数据表,连接数据库语句略,你可以根据你的数据库连接就可以
4、读取存储在数据表中的二进制图片数据
不是特别复杂,按照这个例子,你应该能够在VB2008中达到预期的要求。
这个图片是在VB60中显示的数据表存储的图片截图。
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中达到预期的要求。
这个图片是在VB60中显示的数据表存储的图片截图。