2015.1.5 用DBFactorySingleton写读二进制字段与oralce CLOB类型字段读写[除非需要做内部解析,不要用CLOB,CLOB速度要比BLOB慢15倍以上]
Posted mol1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2015.1.5 用DBFactorySingleton写读二进制字段与oralce CLOB类型字段读写[除非需要做内部解析,不要用CLOB,CLOB速度要比BLOB慢15倍以上]相关的知识,希望对你有一定的参考价值。
//写
FileStream fstr = File.OpenRead(tb_filepath.Text); //openread函数用于打开只读文件,openwrite可写
BinaryReader br = new BinaryReader(fstr);
byte[] buffer = br.ReadBytes((int)fstr.Length);
string sql = string.Format("insert into NVDUSER_FLT.FILE_SOURCE values(1000,‘ ‘,‘ ‘,:cont,‘we‘)");
IDbConnection cnn = DBFactorySingleton.GetInstance().Factory.GetConnection();
cnn.Open();
IDbCommand dbcom = DBFactorySingleton.GetInstance().Factory.GetCommand();
dbcom.Connection = cnn;
dbcom.CommandText = sql;
System.Data.IDataParameter mypara= DBFactorySingleton.GetInstance().Factory.GetDataParameter("cont",DbType.Binary);
mypara.Value = buffer;
dbcom.Parameters.Add(mypara);
dbcom.ExecuteNonQuery();
fstr.Close();
//读
string sql = string.Format("select content from {0}.file_source where file_id={1}",AisLogical.dbuser,fid);
byte[] data = (byte[])DBFactorySingleton.GetInstance().Factory.ExecuteScalar(sql);
if (data != null)
{
String ep = Application.ExecutablePath;
ep = ep.Substring(0, ep.LastIndexOf("\\") + 1);
try
{
string[] fls = Directory.GetFiles(ep, "tmpsourcefile.*");
foreach (string fl in fls)
File.Delete(fl);
}
catch { }
try
{
string pf = ep + "tmpsourcefile."+hzm;
FileStream stream = new FileStream(pf, FileMode.CreateNew, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(data);
bw.Close();
stream.Close();
Thread.Sleep(100);
Process proc = new Process();
proc.StartInfo.FileName = pf;
proc.StartInfo.Arguments = "";
proc.Start();
}
catch { }
}
CLOB、BLOB 是oracle两种特殊字段类型大小限制都是4G,CLOB与BLOB的区别是CLOB处理大字符串,而BLOB相当大二进制文件。在Oracle内部dbms_lob对CLOB进行类似于字符串比较等,这里不介绍。
插入:
OracleParameter para = new OracleParameter("cont", OracleType.Clob);
para.Value = xmlheader;
cmd.Parameters.Clear();
cmd.Parameters.Add(para);
cmd.CommandText = "insert into kmlview(name,content) values(‘机场‘,:cont) ";
cmd.ExecuteNonQuery();
读取:与读普通字符串没有区别
sql = string.Format("select content from {0}.kmlview where name=‘机场‘ ", AisLogical.dbuser);
string data = DBFactorySingleton.GetInstance().Factory.ExecuteScalar(sql).ToString().Trim();
除非需要做内部解析,不要用CLOB,CLOB速度要比BLOB速度慢15倍以上
以上是关于2015.1.5 用DBFactorySingleton写读二进制字段与oralce CLOB类型字段读写[除非需要做内部解析,不要用CLOB,CLOB速度要比BLOB慢15倍以上]的主要内容,如果未能解决你的问题,请参考以下文章