这段代码为什么参数无效?非常短,来看看,come

祀城 2014-07-06 12:32:01
Dim conn As New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=test.mdb")
conn.Open()
Dim d As String = " select zhaopian from 表1 where name='1'"
Dim comm As New OleDbCommand(d, conn)
Dim reader As OleDbDataReader = comm.ExecuteReader
reader.Read()
Dim photofile() As Byte
photofile = reader.GetValue(0)
Dim streamph As New MemoryStream(photofile)
PictureBox1.Image = Image.FromStream(streamph)
conn.Close()
...全文
412 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
geyewei 2014-07-08
  • 打赏
  • 举报
回复
刚刚用SQL server 2008r2+VS2008实验了一下,可以正常保存到数据库并取出来显示到窗体上。操作如下: 数据库方面,新建一个表tmp1,表里面两个字段: ID nvarchar(50) zhaopian image 程序方面: 新建一个窗体,拖拽两个按钮和两个PictureBox,给PictureBox1设置好图片,粘贴下面的代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ms As New System.IO.MemoryStream() PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat) Using cnn As New SqlClient.SqlConnection(gsConsvr), cmm As New SqlClient.SqlCommand cnn.Open() cmm.Connection = cnn cmm.CommandText = "INSERT INTO tmp1(ID,zhaopian)VALUES(@id,@zhaopian)" cmm.Parameters.Add(New SqlClient.SqlParameter("@id", 1)) cmm.Parameters.Add(New SqlClient.SqlParameter("@zhaopian", SqlDbType.Image)).Value = ms.GetBuffer cmm.ExecuteNonQuery() End Using End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Using cnn As New SqlClient.SqlConnection(gsConsvr), cmm As New SqlClient.SqlCommand 'gsConsvr是连库字符串 cnn.Open() cmm.Connection = cnn cmm.CommandText = "SELECT zhaopian FROM tmp1 where id='1'" Dim bytes() As Byte = cmm.ExecuteScalar Dim ms As New System.IO.MemoryStream(bytes) PictureBox2.Image = Image.FromStream(ms) End Using End Sub 执行以后,点击第一个按钮,保存到数据库里面,点击第二个按钮就可以读出来并显示到PictureBox2了。 代码很粗糙,凑合着看吧。
祀城 2014-07-08
  • 打赏
  • 举报
回复
引用 29 楼 geyewei 的回复:
刚刚在网上搜了一下,这篇文章或许对你有帮助吧。 http://wenku.baidu.com/link?url=E9WWkUGXmqtxeRf8YDDaEJPnl3RhognrxUlmH2qGpRWFubNjZ89WG9512Qk7bwjLcO9GraIcHprMzfXiZWwP_mO7QxhpbnVFhgr_jLLTbaq
我用的是.net,控件还不太一样,不过我现在大体知道思路了,之前一直执着取出来,现在觉得能先存进去再取出来才能更好的避免其他错误,谢了。我才刚开始学
祀城 2014-07-08
  • 打赏
  • 举报
回复
引用 28 楼 geyewei 的回复:
[quote=引用 26 楼 yang1010363827 的回复:] Cmd.Parameters.Add(New OleDb.OleDbParameter("@zhaopian", OleDbType.Image)).Value = ms.GetBuffer 这条怎么改?
我没有Access的环境,无法做实验,你看看这样改行不行? cmm.Parameters.Add(New OleDbParameter("@zhaopian", OleDbType.VarBinary)).Value = ms.GetBuffer [/quote] 存进去了,长二进制数据,但是我在access里点它打不开。 取出的代码我改成了 Dim Conn As New OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=test.mdb") Dim Cmd As New OleDb.OleDbCommand Conn.Open() Cmd.Connection = Conn Cmd.CommandText = "SELECT zhaopian FROM 表1 where id='6'" Dim bytes() As Byte = Cmd.ExecuteScalar Dim ms As New System.IO.MemoryStream(bytes) PictureBox2.Image = Image.FromStream(ms) Conn.Close() 然后就。。 System.Data.OleDb.OleDbException (0x80040E07): 标准表达式中数据类型不匹配。
geyewei 2014-07-08
  • 打赏
  • 举报
回复
刚刚在网上搜了一下,这篇文章或许对你有帮助吧。 http://wenku.baidu.com/link?url=E9WWkUGXmqtxeRf8YDDaEJPnl3RhognrxUlmH2qGpRWFubNjZ89WG9512Qk7bwjLcO9GraIcHprMzfXiZWwP_mO7QxhpbnVFhgr_jLLTbaq
geyewei 2014-07-08
  • 打赏
  • 举报
回复
引用 26 楼 yang1010363827 的回复:
Cmd.Parameters.Add(New OleDb.OleDbParameter("@zhaopian", OleDbType.Image)).Value = ms.GetBuffer 这条怎么改?
我没有Access的环境,无法做实验,你看看这样改行不行? cmm.Parameters.Add(New OleDbParameter("@zhaopian", OleDbType.VarBinary)).Value = ms.GetBuffer
祀城 2014-07-08
  • 打赏
  • 举报
回复
引用 25 楼 geyewei 的回复:
刚刚用SQL server 2008r2+VS2008实验了一下,可以正常保存到数据库并取出来显示到窗体上。操作如下: 数据库方面,新建一个表tmp1,表里面两个字段: ID nvarchar(50) zhaopian image 程序方面: 新建一个窗体,拖拽两个按钮和两个PictureBox,给PictureBox1设置好图片,粘贴下面的代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ms As New System.IO.MemoryStream() PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat) Using cnn As New SqlClient.SqlConnection(gsConsvr), cmm As New SqlClient.SqlCommand cnn.Open() cmm.Connection = cnn cmm.CommandText = "INSERT INTO tmp1(ID,zhaopian)VALUES(@id,@zhaopian)" cmm.Parameters.Add(New SqlClient.SqlParameter("@id", 1)) cmm.Parameters.Add(New SqlClient.SqlParameter("@zhaopian", SqlDbType.Image)).Value = ms.GetBuffer cmm.ExecuteNonQuery() End Using End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Using cnn As New SqlClient.SqlConnection(gsConsvr), cmm As New SqlClient.SqlCommand 'gsConsvr是连库字符串 cnn.Open() cmm.Connection = cnn cmm.CommandText = "SELECT zhaopian FROM tmp1 where id='1'" Dim bytes() As Byte = cmm.ExecuteScalar Dim ms As New System.IO.MemoryStream(bytes) PictureBox2.Image = Image.FromStream(ms) End Using End Sub 执行以后,点击第一个按钮,保存到数据库里面,点击第二个按钮就可以读出来并显示到PictureBox2了。 代码很粗糙,凑合着看吧。
不会sql。。。也没装。。在access中怎么写
祀城 2014-07-08
  • 打赏
  • 举报
回复
引用 25 楼 geyewei 的回复:
刚刚用SQL server 2008r2+VS2008实验了一下,可以正常保存到数据库并取出来显示到窗体上。操作如下: 数据库方面,新建一个表tmp1,表里面两个字段: ID nvarchar(50) zhaopian image 程序方面: 新建一个窗体,拖拽两个按钮和两个PictureBox,给PictureBox1设置好图片,粘贴下面的代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ms As New System.IO.MemoryStream() PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat) Using cnn As New SqlClient.SqlConnection(gsConsvr), cmm As New SqlClient.SqlCommand cnn.Open() cmm.Connection = cnn cmm.CommandText = "INSERT INTO tmp1(ID,zhaopian)VALUES(@id,@zhaopian)" cmm.Parameters.Add(New SqlClient.SqlParameter("@id", 1)) cmm.Parameters.Add(New SqlClient.SqlParameter("@zhaopian", SqlDbType.Image)).Value = ms.GetBuffer cmm.ExecuteNonQuery() End Using End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Using cnn As New SqlClient.SqlConnection(gsConsvr), cmm As New SqlClient.SqlCommand 'gsConsvr是连库字符串 cnn.Open() cmm.Connection = cnn cmm.CommandText = "SELECT zhaopian FROM tmp1 where id='1'" Dim bytes() As Byte = cmm.ExecuteScalar Dim ms As New System.IO.MemoryStream(bytes) PictureBox2.Image = Image.FromStream(ms) End Using End Sub 执行以后,点击第一个按钮,保存到数据库里面,点击第二个按钮就可以读出来并显示到PictureBox2了。 代码很粗糙,凑合着看吧。
表示不会sql。。。也没装 Dim ms As New System.IO.MemoryStream() PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat) Dim Conn As New OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=test.mdb") Dim Cmd As New OleDb.OleDbCommand Conn.Open() Cmd.Connection = Conn Cmd.CommandText = "INSERT INTO 表1(ID,zhaopian)VALUES(@id,@zhaopian)" Cmd.Parameters.Add(New OleDb.OleDbParameter("@ID", 1)) Cmd.Parameters.Add(New OleDb.OleDbParameter("@zhaopian", OleDbType.Image)).Value = ms.GetBuffer Cmd.ExecuteNonQuery() Conn.Close() Cmd.Parameters.Add(New OleDb.OleDbParameter("@zhaopian", OleDbType.Image)).Value = ms.GetBuffer 这条怎么改?
BrightFireOfCy 2014-07-07
  • 打赏
  • 举报
回复
lz,name加方括号括起来
祀城 2014-07-07
  • 打赏
  • 举报
回复
引用 23 楼 geyewei 的回复:
是不是存进去的数据不正确呀?
...那应该怎么存?
wind_cloud2011 2014-07-07
  • 打赏
  • 举报
回复
会不会是zhaopian类型问题,应该是OLE 对象吧,怎么显示是itmap image?
geyewei 2014-07-07
  • 打赏
  • 举报
回复
是不是存进去的数据不正确呀?
祀城 2014-07-07
  • 打赏
  • 举报
回复
引用 19 楼 BrightFireOfCy 的回复:
lz,name加方括号括起来
。。不行,不是这个问题
落之叶 2014-07-07
  • 打赏
  • 举报
回复
引用 20 楼 yang1010363827 的回复:
[quote=引用 18 楼 wind_cloud2011 的回复:] 会不会是zhaopian类型问题,应该是OLE 对象吧,怎么显示是itmap image?
ole对象没错,我在里面插入image图,显示的就都是itmap image[/quote] 插入图片时就错了,好好看一下你的插入图片吧
祀城 2014-07-07
  • 打赏
  • 举报
回复
引用 18 楼 wind_cloud2011 的回复:
会不会是zhaopian类型问题,应该是OLE 对象吧,怎么显示是itmap image?
ole对象没错,我在里面插入image图,显示的就都是itmap image
祀城 2014-07-06
  • 打赏
  • 举报
回复
把1旁边的‘’去掉就会显示标准表达式中数据类型不匹配 我要显示的是access中的ole图片
祀城 2014-07-06
  • 打赏
  • 举报
回复
引用 15 楼 wind_cloud2011 的回复:
从数据库里取回,并显示  pic是图片字段,取出第6条记录
Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\db2.mdb")
Dim Cmd As New OleDb.OleDbCommand
Dim DataRd As OleDb.OleDbDataReader
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Cmd.CommandText = "select pic from biao where 编号=6" '注意选择编号
Conn.Open()
DataRd = Cmd.ExecuteReader
If DataRd.Read Then
Dim da() As Byte
da = DataRd(0)
Dim streamph As MemoryStream = New MemoryStream(da)
PictureBox1.Image = Bitmap.FromStream(streamph)
End If
DataRd.Close()
Conn.Close()
End Sub

Dim Conn As New OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=test.mdb")
Dim Cmd As New OleDb.OleDbCommand
Dim DataRd As OleDb.OleDbDataReader
Cmd.Connection = Conn
Cmd.CommandText = "select zhaopian from 表1 where ID=1" '注意选择编号
Conn.Open()
DataRd = Cmd.ExecuteReader
If DataRd.Read Then
Dim da() As Byte
da = DataRd(0)
Dim streamph As MemoryStream = New MemoryStream(da)
PictureBox1.Image = Bitmap.FromStream(streamph)
End If
DataRd.Close()
Conn.Close()
我光换了个查询就参数不对,数据库是这样
落叶1210 2014-07-06
  • 打赏
  • 举报
回复
首先,你要标出哪一句代码 的参数无效! 以下代码: Dim photofile() As Byte //变量名,怎么有个括号,而且,既然想保存img对象,是不是该定义一个数组 photofile = reader.GetValue(0) //不知道 GetValue(0) 返回的结果和 Byte[]之间是否存在 强制转换? Dim streamph As New MemoryStream(photofile)//如果photofile 为 null,则会出现参数无效的情况。 PictureBox1.Image = Image.FromStream(streamph) conn.Close()
无涯大者 2014-07-06
  • 打赏
  • 举报
回复
引用 2 楼 wind_cloud2011 的回复:
你得看一下数据库中name='1' ,这说明name是字符类型的字段,去了''变整型,你看一下数据库name的字段类型  
有道理!LZ好好看看。。
wind_cloud2011 2014-07-06
  • 打赏
  • 举报
回复
你得看一下数据库中name='1' ,这说明name是字符类型的字段,去了''变整型,你看一下数据库name的字段类型  
wind_cloud2011 2014-07-06
  • 打赏
  • 举报
回复
图片是2进制存入的
加载更多回复(11)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧