日期:2014-05-18  浏览次数:20562 次

二进制写Oracle数据库blob类型字段超级慢,Why????????
这是个实验程序,兄弟们帮我看看有什么毛病,运行起来太慢了,顺便看看有没有语法错误,小弟拜求!
---------------------------
private   void   Button1_Click(object   sender,   System.EventArgs   e)
{
byte[]   f=UpLoadFile(this.File1);
string   DocName=System.IO.Path.GetFileNameWithoutExtension(this.File1.PostedFile.FileName.ToString());

string   strSql_1= "insert   into   docinfo(ID,DOCID,DOCNAME,DOCDIR,DOCBODY)   values( '1 ', '4 ', ' "+DocName+ " ', 'c:\ ',EMPTY_BLOB()) ";

string   strSql_2= "update   docinfo   set   DOCBODY= ':f '   where   DOCID=4 ";

conn=new   OleDbConnection(ConnectionString);
conn.Open();
cmd1=new   OleDbCommand(strSql_1,conn);
cmd1.ExecuteNonQuery();
/**********************************************/
cmd2=new   OleDbCommand(strSql_2,conn);
cmd2.ExecuteNonQuery();
}
--------------------
这是将文件转换成Byte类型的函数:

public   byte[]   UpLoadFile(HtmlInputFile   f1)
{
//获取由客户端指定的上传文件的访问
HttpPostedFile   upFile=f1.PostedFile;
//得到上传文件的长度
int   upFileLength=upFile.ContentLength;  
//得到上传文件的客户端MIME类型
string   contentType   =   upFile.ContentType;
byte[]   FileArray=new   Byte[upFileLength];
 
Stream   fileStream=upFile.InputStream;  
                               
fileStream.Read(FileArray,0,upFileLength);
               
return   FileArray;

}


------解决方案--------------------
可能跟你的服务器有关系。
给你个例子
//wjbody是blob字段
public int insertwjsc (string miaoshu,byte[] wjbody,string fileExtension,string wjid) 

int n = 0; 
if (conn.State==System.Data.ConnectionState.Closed) 
conn.Open(); 
string sql = "insert into wjsc (id,miaoshu,neirong,shijian,houzhuiname,wjid) values (wjsc_id.nextval,'"+miaoshu+"',:wjBody,to_date('"+DateTime.Now.ToString()+"','YYYY-MM-DD HH24:MI:SS'),'"+fileExtension+"','"+wjid+"')"; 
OracleCommand cmd=new OracleCommand(sql,conn); 
cmd.Parameters.Add("wjBody",System.Data.OracleClient.OracleType.Blob,wjbody.Length); 
cmd.Parameters [0].Value = wjbody; 
n = cmd.ExecuteNonQuery(); 
conn.Close(); 
return n; 
}