VB问题——二进制文件与数据库

ghw 2000-12-26 10:26:00
<问题:>
怎么把文件以二进制方式读入数据库(MS SQL Server 7),在需要时读出并重新生成文件?
请大家指教!

--------------------------
<具体情况:>
我用ADO的AppendChunk把一个从文件读出的二进制流(Byte数组)放入了数据库的image字段,但用GetChunk读出后(只能读出Variant型变量),怎么也转不回原来的二进制流(写入文件后不对)。
...全文
130 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_east_key 2000-12-28
  • 打赏
  • 举报
回复
请到http://www.etechbase.net/advsearch.php,将你这个问题输入到检索框,然后选择准确匹配查询,应该可以帮助你解决这个问题的。
wuccc 2000-12-26
  • 打赏
  • 举报
回复
贴上你的代码
ghw 2000-12-26
  • 打赏
  • 举报
回复
大家帮帮忙啊!
ghw 2000-12-26
  • 打赏
  • 举报
回复
to wuccc:

下面是我用于测试的程序的代码:
按钮Command_open:用于打开一个文件,将其内容存入二进制数组varFile()。
按钮Command_save:用于把二进制数组中的内容存入数据库的image型字段。
按钮Command_read:用于按一个id号,将二进制字段内容取出,并存入文件。


------------------------------------------------------------------------
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command

Dim varFile() As Byte
Dim FileLength, i As Long
Dim conChunkSize As Long

Private Sub Command_open_Click()

CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & _
"(*.txt)|*.txt|Batch Files (*.bat)|*.bat"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowOpen

' 打开文件
' read from file,save it in varFile()
Text_filename.Text = CommonDialog1.FileName
i = 0

Open Text_filename.Text For Binary As #1
FileLength = LOF(1)
If FileLength > 100000 Then
conChunkSize = FileLength / 100
Else
conChunkSize = 1000
End If
ReDim varFile(FileLength-1)
Get #1, , varFile
Close #1

MsgBox "FileLength: " & FileLength
Exit Sub
ErrHandler:
' 用户按了“取消”按钮
Exit Sub
End Sub

Private Sub Command_read_Click()
Dim SQL, ss As String
Dim varContent, varChunk22 As Variant
Dim varByte() As Byte

'从数据库中读出文件内容,写入varContent
SQL = "select * from test1 where "
ss = "id=" & Text2.Text
SQL = SQL + ss + ";"
MsgBox "SQL: " & SQL

rs.CursorLocation = adUseServer
rs.Open SQL, conn, adOpenDynamic, adLockPessimistic
FileLength = rs.Fields("content2").ActualSize
MsgBox "FileLength: " & FileLength

i = 0
Do While i < FileLength
varChunk22 = rs.Fields("content2").GetChunk(conChunkSize)
varContent = varContent & varChunk22
i = i + conChunkSize
Loop
rs.Close

MsgBox "length of varContent: " & Len(varContent)

'将varContent内容转换为Byte类型,存入varByte()
??????????
这段代码怎么编?

'将varByte()写入磁盘
Open "d:\abc" For Binary As #2
Put #2, , varByte
Close #2
End Sub

Private Sub Command_save_Click()
Dim maxid As Integer
Dim varChunk As Variant

'先取出数据库中的最大记录号
rs.CursorLocation = adUseServer
rs.Open "select count(*) as count_all from test1;", conn, adOpenDynamic, adLockPessimistic
maxid = rs.Fields("count_all") + 1
rs.Close
MsgBox "maxid: " & maxid

'使用AppendChunk方法,将从文件得到的内容varFile()存入数据库
rs.CursorLocation = adUseServer
rs.Open "select * from test1;", conn, adOpenDynamic, adLockPessimistic
rs.AddNew
rs.Fields("id") = maxid
rs.Fields("descripe") = Text_filename.Text
MsgBox "ready to insert the file content!"
i = 0
Do While i < FileLength
varChunk = LeftB(RightB(varFile(), FileLength - i), conChunkSize)
rs.Fields("content2").AppendChunk varChunk
i = i + conChunkSize
Loop
MsgBox "insert the file content over!"

rs.Update
MsgBox "Update!"
rs.Close

End Sub


Private Sub Form_Load()
Dim connstr As String
'打开数据库
connstr = "Provider=SQLOLEDB.1;Integrated Security=SSPI; " & _
"Persist Security Info=False;Initial Catalog=mydata;" & _
"Data Source=ghw"
conn.Open connstr

conChunkSize = 1000
End Sub


Private Sub Form_Unload(Cancel As Integer)
conn.Close
Set conn = Nothing
End Sub

------------------------------------------------------------------------

34,838

社区成员

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

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