![]() |
【转帖】关于读取oracle的blob字段的问题
关于读取oracle的blob字段的问题
www.dimcax.com 关于读取oracle的blob字段的问题 此为c++连oracle的oracle的名为“ntlands”的表的“content”--blob字段 读取地形图的代码:(测试通过!!!) odatabase odatabase1; odynaset odynaset1; ostartup(); odatabase1.open("nt","nt","sde");//连oracle char layername [20]; layername="43211234";//事先定义,方便读者查看 int currentscale=500;//事先定义,方便读者查看 oparametercollection opm=odatabase1.getparameters(); opm.add("dwgname",layername,oparameter_invar, otype_varchar2); opm.add("inputscale",currentscale,oparameter_invar, otype_varchar2); odynaset1.open(odatabase1,"select * from ntlands where layername=wgname and maptype=:inputscale order by endtime desc"); opm.remove(0); opm.remove(1); if(!odatabase1.isopen()){ acutprintf("\n图形数据库未能打开,请与数据库管理员联系!"); } char val[100]=""; if(!odynaset1.iseof()) { try { oblob oblob; odynaset1.getfieldvalue("content", &oblob);//这句在c#.net中的中如何读取?请教 unsigned long size=oblob.getsize(); unsigned long optimumchunksize=oblob.getoptimumchunksize(); unsigned int bufsize=((int)(32768/optimumchunksize))*optimumchunksize; if(bufsize>size){ bufsize=size; } char filename [50] filename="c://wjcadtemp//43211234.dwg");//事先定义,方便读者查看 oblob.copytofile(filename,size,bufsize); oblob.close(); } catch(oexception e){ acutprintf(e.geterrortext()); acutprintf("\nbolb操作错误"); } } else { acutprintf("\n该地点没有对应的地形图"); } 以下为我用c#.net改写以上代码的结果,遇到不少问题: int actual = 0; oracleconnection conn = new oracleconnection("data source=nt;user=nt;password=sde;"); using(conn) { conn.open(); oraclecommand cmd = conn.createcommand(); cmd.commandtext ="select * from ntlands where maptype='"+inputscale +"'and layername='"+ dwgname + "' order by endtime desc"; oracledatareader reader = cmd.executereader(); using(reader) { //obtain the first row of data. reader.read(); //obtain the lobs (all 3 varieties). oraclelob blob = reader.getoraclelob(1/*0:based ordinal*/); //连oracle的oracle的名为“ntlands”的表的“content”--blob字段 //此处该如何读取?思考开发中 //example - reading binary data (in chunks). byte[] buffer = new byte[100]; while((actual = blob.read(buffer, 0/*buffer offset*/, buffer.length/*count*/)) >0) console.writeline(blob.lobtype + ".read(" + buffer + ", " + buffer.length + ") => " + actual); //此为参考了在网上看到的读blob字段的方法 } conn.close(); } layername="43211234"; 关于这个名字,我想补充一下,这个名字其实是需要调的图的左上角的坐标的前四位(4321,1234) |
所有的时间均为北京时间。 现在的时间是 01:44 AM. |