问题描述
向Oracle数据库插入图片时,图片取绝对路径时不报错,当用OpenFileDialog取图片路径时报-->文件“C:DocumentsandSettingsAllUsersDocumentsMyPictures示例图片Waterlilies.jpg”正由另一进程使用,因此该进程无法访问该文件。代码如下请高手指出错误。1、按钮事件1(用OpenFileDialog取图片路径)privatevoidbuttonEdit1_Properties_ButtonClick(objectsender,e){stringFileName;opd_Pic.Filter="JPG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp";if(opd_Pic.ShowDialog()==DialogResult.OK){FileName=this.opd_Pic.FileName;if(FileName!=""){pte_See.Image=Image.FromFile(FileName);btne_Serch_Pic.Text=Path.GetFullPath(FileName);strPathName=btne_Serch_Pic.Text;变量取图片路径strPathName=strPathName.Replace("\","\");}}}2、按钮事件2(往数据库插入图片)privatevoidbtn_Add_Pic_Click(objectsender,EventArgse){if(btne_Serch_Pic.Text!=""){FrmLog.gConn.Open();m_Dt=newDataTable();stringm_Sql;try{//..先插入空的blob数据m_Sql="insertintot_khxx_c#(tp,kh_id)values(EMPTY_BLOB(),"+strKH_ID+")";OracleCommandmCmd=newOracleCommand(m_Sql,FrmLog.gConn);mCmd.ExecuteNonQuery();FileStreamfs=newFileStream(strPathName,FileMode.OpenOrCreate);fs.Close();fs=newFileStream(strPathName,FileMode.Open,FileAccess.Read);byte[]blob=newbyte[fs.Length];fs.Read(blob,0,blob.Length);fs.Close();//maxStudid=MaxStudid();SavePhoto(strKH_ID,blob,"kh_id","tp","t_khxx_c#");//插入图片}catch(Exceptionex){throwex;}finally{FrmLog.gConn.Close();}}}
解决方案
解决方案二:
图片是否打开?或者你前一次取图片的时候的进程未关闭?
解决方案三:
2楼,我是以流的方式取的,取之后已经关闭了。。。不知问题出在那里???请达人们指教,谢谢了
解决方案四:
为什么FileStream要实例化两次,第一次根本没作用;
解决方案五:
问题找到了:把FileStreamfs=newFileStream(strPathName,FileMode.OpenOrCreate);改为:FileStreamfs=newFileStream(strPathName,FileMode.OpenOrCreate,FileAccess.Read)即可,还有只需实例化一次即可。
解决方案六:
看着是关闭了!其实报哪个错就代表你没有把内存中的程序清楚干净!还有进程在站用着
解决方案七:
恭喜!
解决方案八:
该回复于2008-05-09 11:16:58被版主删除