hur.cn - 华软网

 热门搜索

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

  作者:未知    来源:网络    更新时间:2018/3/3
sql server 表的字段类型为image,我把一个10M的文件读进blob变量,再updateblob,sql xerver数据库会增加20M,日志文件也增加20M以上,怎么不是10M呢?用selectblob读取该数据到一个blob变量,长度只有32K,怎么回事呢?在执行上述语句前已设置sqlca.autocommit=true.
------华软网友回答------
再把图片取出来另存为看大小变化了没?
关注 + 友情UP
------华软网友回复------
1.读取>32k的文件应该用循环来读取,你的程序应该没有这样做,所以只存了32k数据,搜索一下以前的帖子有很多例子.  

2.对于增长20m的原因,你检查一下数据库的设置,SQL SREVER 有两种增长方式 1. 以10%增长 2.每次增长x, 日志文件也同理! 按你的情况可能是数据库刚满,自动申请空间的结果!
------华软网友回复------
我的保存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说的我同意,SQL SREVER 确实有两种增长方式 1. 以10%增长 2.每次增长x, 日志文件同样道理。你可以做个测试,删除一些不用的数据,释放一部分mdf中的空间,在试试看结果。
我再给你举个存储图片文件的例子,你参考一下,看是否有收获。
------华软网友回复------
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

------华软网友回复------
特定SQL语句来操作图片数据,从数据库中提取出指定图片来显示到图片控件中。
selectblob picture
into :lb_picture
from picture
where zt=:sle_1.text;

p_1.SetPicture(lb_picture)

------华软网友回复------
我不是取循环次数
直接
do while fileread(ll_n1,lb_b)<>-100  //如没有读到最文件尾

loop

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

     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。