如何向数据库字段中写入文件?

mjdwcn 2007-08-04 06:30:20
1 如何向数据库字段中写入文件?(EXE,TXT,DOC等等)
2 如果文件较大,如何获取写入进度?
3 如何判断文件写入成功?
...全文
228 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuyiyong 2007-08-06
  • 打赏
  • 举报
回复
反正读出来全是二进制的,怎么搞随便
yasmong 2007-08-05
  • 打赏
  • 举报
回复
将文件流转化为二进制数据后写入数据库,下面是我写的代码用于读写图片文件的,你只需要在数据库中为字段选择varbinary类型就可以实现其他类型的存储了.没整理,有点乱.
Dim b() As Byte
Dim fs As filestream
Dim br As BinaryReader
Dim strsql As String
Try
fs = New FileStream(finfo.Name, FileMode.Open, FileAccess.Read) '将选择的图像文件读入到文件流
br = New BinaryReader(fs)
b = br.ReadBytes(fs.Length) '将文件内容放到字节数组
Catch ex As Exception
MsgBox("在将文件读入内存时出错:" + ex.Message)
End Try
br.Close()
fs.Close()

strsql = "insert into test(imageName,photo) "
strsql += "values('" & finfo.Name & "',@photo)" '二进制数据用@标识

Dim sqlCn As SqlConnection = New SqlConnection("server=dell;database=study;uid=sa;pwd=;")
sqlCn.Open()
Dim myCommand As SqlCommand = New SqlCommand(strsql, sqlCn)
myCommand.Parameters.Clear()
myCommand.Parameters.Add("@photo", OleDb.OleDbType.Binary)
myCommand.Parameters("@photo").Value = b
myCommand.ExecuteReader()

读取文件代码如下:
Dim strsql As String
strsql = "select * from test"
Dim sqlCn As SqlConnection = New SqlConnection("server=dell;database=study;uid=sa;pwd=;")
Dim bw As BinaryWriter
Dim bufferSize As Integer = 100 '定义缓冲区长度为100
Dim outbyte() As Byte = New Byte(bufferSize - 1) {} '定义缓冲区
Dim retval As Long
Dim startIndex As Long = 0
Dim dr As SqlDataReader
Dim myCommand As SqlCommand = New SqlCommand(strsql, sqlCn)
sqlCn.Open()
Dim ms As New System.IO.MemoryStream '定义内存流对象,将数据库中存储的图像数据先放到内存流中
Try
bw = New BinaryWriter(ms)
dr = myCommand.ExecuteReader()
dr.Read()
TextBox1.Text = dr.GetString(1)
startIndex = 0
retval = dr.GetBytes(2, startIndex, outbyte, 0, bufferSize)

Do While retval = bufferSize '循环读取余下的内容,每次读取buffersize个字节
bw.Write(outbyte)
bw.Flush() '清空缓冲区
startIndex += bufferSize '移动位置指针
retval = dr.GetBytes(2, startIndex, outbyte, 0, bufferSize)
Loop

Dim image As Image = image.FromStream(ms)
Me.PictureBox1.Image = image '利用内存流在picturebox中生成图像

bw.Write(outbyte, 0, retval) '写入最后一块数据
bw.Flush()
bw.Close()
ms.Close()
dr.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Jinglecat 2007-08-05
  • 打赏
  • 举报
回复
// 读取

int colIndex = DataReader.GetOrdinal("MyLargeObjectColumnName");
byte[] buffer = new byte[DataReader.GetBytes(colIndex, 0, null, 0, int.MaxValue)];
DataReader.GetBytes(colIndex, 0, buffer, 0, buffer.Length);

// 处理 buffer
feizhuliu01 2007-08-05
  • 打赏
  • 举报
回复
那如果是其他类型的文件呢,就不能用picturebox控件了,那如何读取呢?
mjdwcn 2007-08-04
  • 打赏
  • 举报
回复
忘了说了,还有就是如何读取这些文件

16,553

社区成员

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

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