如何用VB读取SqlServer中的二进制字段

长安宁 2004-07-05 11:33:02
大家都可以看到,可以用“查询器”看到二进制里面的东西是用“0X"的形式表示的;请问如何用VB 把里面的东西取出来;
我我只知道如何向里面写东西"update [] set items=0xff0000000000 where accounitid='kktt'";但是该如果取出来呀?
"select items from [] where accountid='kktt'",就不行了,出来的是"?????"之类的东西;
...全文
445 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
长安宁 2004-07-06
  • 打赏
  • 举报
回复
“查询分析器”里面显示的不就是一个用“十六进制”表示的字段吗?
有没有什么办法,把二进制的字段,表示成十六进制的形式呀?
长安宁 2004-07-06
  • 打赏
  • 举报
回复
有人会吗?
射天狼 2004-07-05
  • 打赏
  • 举报
回复
Option Explicit

Dim cn As New ADODB.Connection, rs As New ADODB.Recordset

'保存
Private Sub Command1_Click()
Dim bteContent() As Byte

Open "C:\aa.bmp" For Binary Access Read As #1
bteContent = InputB(LOF(1), #1)
Close #1

If rs.State = adStateOpen Then rs.Close
rs.Open "select * from tablename", cn, adOpenDynamic, adLockPessimistic
rs.AddNew
rs!Name = "张三"
rs!AGE = 22
rs!SEX = "男"
rs.Fields("PHOTO").AppendChunk bteContent
rs.Update

Erase bteContent
End Sub

'打开
Private Sub Command2_Click()
Dim bteContent() As Byte
If rs.State = adStateOpen Then rs.Close
rs.Open "select * from tablename", cn, adOpenForwardOnly, adLockReadOnly
bteContent = rs.Fields("PHOTO").GetChunk(rs.Fields("PHOTO").ActualSize)

Open "C:\aa.bmp" For Binary Access Write As #1
Put #1, , bteContent
Close #1
Image1.Picture = LoadPicture("C:\aa.bmp")
End Sub

Private Sub Form_Load()
On Error GoTo Errhandle
cn.ConnectionString = "Driver={SQL Server};SERVER=DataServer;DATABASE=zxzx;UID=information;PWD=information*&#"
cn.Open

Exit Sub
Errhandle:
MsgBox Err.Description, vbExclamation
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
online 2004-07-05
  • 打赏
  • 举报
回复
看看
你那样保存到数据库不行的

'http://support.microsoft.com/default.aspx?scid=kb;EN-US;258038

'*************************************************************************
'**
'** 使用 ADODB.Stream 保存/读取文件到数据库
'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
'**
'** ----- 数据库连接字符串模板 ---------------------------------------
'** ACCESS数据库
'** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
'** ";Data Source=数据库名"
'**
'** SQL数据库
'** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
'** "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
'**

'保存文件到数据库中
Sub s_SaveFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConcStr As String

'数据库连接字符串
iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
";Data Source=F:\csdn_vb\database\保存图片\img.mdb"
Dim iConc As ADODB.Connection
Set iConc = New ADODB.Connection

iConc.Open iConcStr
'读取文件到内容
Set iStm = New ADODB.Stream
With iStm
.Type = adTypeBinary '二进制模式
.Open
.LoadFromFile App.Path + "\com.doc"
End With

'打开保存文件的表
Set iRe = New ADODB.Recordset
With iRe
.Open "select * from img", iConc, 1, 3
.AddNew '新增一条记录
.Fields("photo") = iStm.Read
.Update
End With

'完成后关闭对象
iRe.Close
iStm.Close
End Sub

Sub s_ReadFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConc As String

'数据库连接字符串
iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
";Data Source=F:\csdn_vb\database\保存图片\img.mdb"

'打开表
Set iRe = New ADODB.Recordset
iRe.Open "img", iConc, adOpenKeyset, adLockReadOnly
iRe.Filter = "id=3" '比如单击datagrid后找到id=3的纪录

'保存到文件
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write iRe("photo")
.SaveToFile "c:\com.doc"
End With

OLE1.SourceDoc = "c:\\com.doc"
OLE1.Action = 1 'use the old action method
OLE1.SizeMode = vbOLESizeAuttoSize '调节对象大小使其正好充满OLE容器控件

'Picture1.Picture = LoadPicture("c:\tesd.bmp")

'关闭对象
iRe.Close
iStm.Close
End Sub



Private Sub Command1_Click()
Call s_ReadFile
End Sub

Private Sub Command2_Click()
Call s_SaveFile
End Sub
长安宁 2004-07-05
  • 打赏
  • 举报
回复
有人会吗?
lifengnm 2004-07-05
  • 打赏
  • 举报
回复
VB怎么跑到这儿了?
长安宁 2004-07-05
  • 打赏
  • 举报
回复
就像是"查询分析器"里面显示的那样!
guxizhw 2004-07-05
  • 打赏
  • 举报
回复
当然不能显示
已经是bin类型了,需要转换的,不知道你要显示成什么样子?象ultraedit那样的16进制?还是?
长安宁 2004-07-05
  • 打赏
  • 举报
回复
但是我要的不是image字段,是二进制字段;(我不是想把文件保存进去,也不是想把图片保存进Image字段里面去,我只是想把里面的二进制字段内容显示出来即可,就像是“查询器”里面看到的结果)
而且用以上的方法,确定可以向二进制字段里面写入东西的,而且可以通过“查询器”看到其结果;
其实我是想得到“查询器”里面的二进制字段的结果,而且是在VB里面显示出来(即:在VB里显示和“查询器”一样的结果,事与愿违,显示的是乱码);

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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