图片文件保存到sql server库和读取

yamsan 2005-06-02 11:23:01
sql server 表的字段类型为image,我把一个10M的文件读进blob变量,再updateblob,sql xerver数据库会增加20M,日志文件也增加20M以上,怎么不是10M呢?用selectblob读取该数据到一个blob变量,长度只有32K,怎么回事呢?在执行上述语句前已设置sqlca.autocommit=true.
...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ribut9225 2005-06-03
  • 打赏
  • 举报
回复
我不是取循环次数
直接
do while fileread(ll_n1,lb_b)<>-100 //如没有读到最文件尾

loop

不知道这样做会不会出错
请高手指点一下

princelily 2005-06-03
  • 打赏
  • 举报
回复
特定SQL语句来操作图片数据,从数据库中提取出指定图片来显示到图片控件中。
selectblob picture
into :lb_picture
from picture
where zt=:sle_1.text;

p_1.SetPicture(lb_picture)
princelily 2005-06-03
  • 打赏
  • 举报
回复
string ls_path_filename,ls_filename

getfileopenname('选择照片文件',ls_path_filename,ls_filename,"JPG","JPG Files(*.JPG),*.JPG")
if ls_filename='' then return

fp=fileopen(ls_path_name,streammode!) //打开JPG照片文件
fileread(fp,i_photo) //照片数据存入blob类型I_photo变量中
fileclose(fp) //照片的JPG文件容量很小,只读取最多64KB的数据
//照片数据存入职工照片表中
updateblob emp_photo set photo=:i_photo where emp_ID=:g_emp_ID ;

if sqlca.sqlcode= -1 then
ROLLBACK;
messagebox('出错信息','照片存储失败!')
else
commit;
end if
princelily 2005-06-03
  • 打赏
  • 举报
回复
lzheng2001说的我同意,SQL SREVER 确实有两种增长方式 1. 以10%增长 2.每次增长x, 日志文件同样道理。你可以做个测试,删除一些不用的数据,释放一部分mdf中的空间,在试试看结果。
我再给你举个存储图片文件的例子,你参考一下,看是否有收获。
嘘嘘兔 2005-06-02
  • 打赏
  • 举报
回复
我的保存image的脚本,参考一下

long ll_filelen
int li_filenum,li_loops,li_counter
blob lb_read,lb_picture
string ls_photofile='aaa.jpg',ls_no //把程序目录下aaa.jpg保存到数据库
ls_no=dw_1.getitemstring(dw_1.getrow(),'no')//得到编号
ll_filelen=filelength(ls_photofile)
li_filenum=fileopen(ls_photofile,streammode!,read!,lockread!)

if ll_filelen > 32765 then
li_loops=((ll_filelen - 1)/32675)+1
else
li_loops=1
end if

for li_counter=1 to li_loops
fileread(li_filenum,lb_read)
lb_picture=lb_picture+lb_read
next
fileclose(li_filenum)

p_1.setpicture(lb_picture)

sqlca.autocommit=true
updateblob t_health
set picture=:lb_picture
where no = :ls_no;
if sqlca.sqlnrows>0 then
commit;
else
rollback;
return 0
end if
sqlca.autocommit=false
return 1
else
rollback;
return 0
end if








lzheng2001 2005-06-02
  • 打赏
  • 举报
回复
1.读取>32k的文件应该用循环来读取,你的程序应该没有这样做,所以只存了32k数据,搜索一下以前的帖子有很多例子.  

2.对于增长20m的原因,你检查一下数据库的设置,SQL SREVER 有两种增长方式 1. 以10%增长 2.每次增长x, 日志文件也同理! 按你的情况可能是数据库刚满,自动申请空间的结果!
j9dai 2005-06-02
  • 打赏
  • 举报
回复
再把图片取出来另存为看大小变化了没?
关注 + 友情UP

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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