sql中保存图片的问题

qffhq 2002-11-13 03:23:33
如何把图片保存到SQL表中去,以及如何再取出来
,急!!
...全文
68 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qffhq 2002-11-15
  • 打赏
  • 举报
回复
此问题已处理如下:

vb+ado2.0,
新建工程1,在 Form1上添加Command2,Command3

Code如下

Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim tmpfile As String, FileNum As Integer, tmpByte() As Byte
Dim fileLen As Long, BlockNum As Long, BlockRem As Long, i As Long
Const BLOCKSIZE = 1000

Private Sub Command2_Click()
FileNum = FreeFile()
tmpfile = "e:\aa.bmp"
Open tmpfile For Binary Access Read As FileNum

fileLen = LOF(FileNum)
BlockNum = fileLen / BLOCKSIZE
BlockRem = fileLen Mod BLOCKSIZE
ReDim tmpByte(BLOCKSIZE)

For i = 1 To BlockNum
Get FileNum, , tmpByte()
rs.Fields(0).AppendChunk tmpByte()
Next i

If BlockRem > 0 Then
ReDim tmpByte(BlockRem)
Get FileNum, , tmpByte()
rs.Fields(0).AppendChunk tmpByte()
End If

Close FileNum
rs.Update

End Sub

Private Sub Command3_Click()

FileNum = FreeFile()
tmpfile = "e:\bb.bmp"
fileLen = rs.Fields(0).ActualSize - 1
BlockNum = fileLen / BLOCKSIZE
BlockRem = fileLen Mod BLOCKSIZE

Open tmpfile For Binary Access Write As FileNum
ReDim tmpByte(BLOCKSIZE)
For i = 1 To BlockNum
tmpByte() = rs.Fields(0).GetChunk(BLOCKSIZE)
Put FileNum, , tmpByte()
Next
If BlockRem > 0 Then
ReDim tmpByte(BlockRem)
tmpByte() = rs.Fields(0).GetChunk(BlockRem)
Put FileNum, , tmpByte()
End If

Close FileNum


End Sub

Private Sub Form_Load()
cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=qfjxc;Data Source=qfserver"
rs.Open "tmp_1", cn, adOpenDynamic, adLockOptimistic, adCmdTable

End Sub
qffhq 2002-11-14
  • 打赏
  • 举报
回复
用VB6+ADO2如何实现呢,
能不能用T-SQL语句实现的呢?
lyyrw 2002-11-14
  • 打赏
  • 举报
回复
delphi中

//写(把image转化为流,写入数据库)
pQuery.Edit;
TBlobField *pField=(TBlobField *)pQuery.FieldByName("Image");
TlobSream *pmen=new TBlobStream(pField,bmWrite);
pmen.seek(0,soFromBeginning);
Bitmap *pBitmap=new TBitmap;
pBitmap.Assign(Image1.Picture.Graphic);
pBitmap.SaveToStream(pmen);
free pBitmap;
free pmen;
pQuery.Post;
cainiao000 2002-11-14
  • 打赏
  • 举报
回复
用ado的Stream方法!
ado2.6以上的都可以!


Private Sub ImportBLOB(cn As ADODB.Connection)

Dim rs As New ADODB.Recordset
Dim stm As ADODB.Stream

Set stm = New ADODB.Stream

' Skip any table not found errors
On Error Resume Next
cn.Execute "drop table BinaryObject"

On Error GoTo 0
'Create the BinaryObject table
cn.Execute "create table BinaryObject " & _
"(blob_id int IDENTITY(1,1), " & _
"blob_filename varchar(256), " & _
"blob_object image)"

rs.Open "Select * from BinaryObject where 1=2", cn, adOpenKeyset, adLockOptimistic
'Read the binary files from disk
stm.Type = adTypeBinary
stm.Open
stm.LoadFromFile App.Path & "\BLOBsample.jpg"

rs.AddNew
rs!blob_filename = App.Path & "\BLOBsample.jpg"
rs!blob_object = stm.Read

'Insert the binary object in the table
rs.Update

rs.Close
stm.Close

Set rs = Nothing
Set stm = Nothing

End Sub
Private Sub DisplayBLOB(cn As ADODB.Connection)

Dim rs As New ADODB.Recordset

' Select the only image in the table
rs.Open "Select * from BinaryObject where blob_id = 1", cn

' Set the DataSource to the recordset
Set imgBinaryData.DataSource = rs
'Set the DataField to the BLOB field
imgBinaryData.DataField = rs!blob_object.Name

'Release the recordset
rs.Close
Set rs = Nothing

End Sub
qffhq 2002-11-14
  • 打赏
  • 举报
回复
我用ado的Stream方法能保存,但取出来的数据无法显示为图形、
SQL有个示例取图片,用Filed的GetChunck方法,好像要对文件头先进行处理
,后写入库中!

继续讨论,最好有个示例!
qffhq 2002-11-13
  • 打赏
  • 举报
回复
有没有实例呀

急!!
blue_flying 2002-11-13
  • 打赏
  • 举报
回复
一般将多媒体的信息插入数据库的某一字段,采用的方法是将该文件作为二进制的数据插入的对于SQL SERVER 和 ORACLE 都是一样的,你可以将该文件用二进制的方法读入,再将二进制其插入对应字段.......

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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