string connStr ="user id=test;data source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.109)(PO RT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)));password=test1;Persist Security Info=True;enlist=false;"
OracleConnection conn = new OracleConnection(connStr);
OracleCommand cmd = conn.CreateCommand();
conn.Open();
//读取文件
FileStream fs = File.OpenRead(filePath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
OracleParameter paramFileContent = cmd.CreateParameter();
paramFileContent.OracleType = OracleType.Blob;
paramFileContent.ParameterName = "FileContent";
paramFileContent.Direction = ParameterDirection.Input;
paramFileContent.Value = buffer;
cmd.Parameters.Add(paramFileContent);
string fileName = Path.GetFileNameWithoutExtension(filePath);//文件名
//string fileExtension = Path.GetExtension(filePath).ToUpper().Split('.')[1];//拓展名
string sqlStr = @"insert into test(id, file_name, file_mes) values (sys_guid(), fileName , :FileContent)";
cmd.CommandText = sqlStr;
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
result = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
conn.Close();
byte[] b = (byte[])focusRow["FILE_MES"];
String Content = Encoding.UTF8.GetString(b);
String Content = Encoding.Unicod.GetString(b);
String Content = Encoding.Default.GetString(b);
如果直接保存( File.WriteAllBytes(@"" + downLoadUrl, byte[] b)没有问题。
首先要看你blob里存的到底是个什么东西呀
你存二进制文件那当然没问题,反正最后是对应的app去打开它
如果你想直接在内存里打开,那就得知道它到底是个什么格式,然后对应的方式打开
如果是个图片,你要转image然后显示在picturebox里,如果是富文本你需要放到richtextbox里,你无脑把什么都转字符串可不乱码吗
不用转换什么,你当时怎么写进去的,就怎么读出来
比如 using(filestream fs=new FileInfo("xxx.pdf").Crreate()) //当然我这里是写到文件,你写到内存stream一样
{
fs.write(你现在读出的byte[])
}
至于显示么,你需要去nuget 里去找一些viewer就好了
ps:好的viewer本身支持多种格式文件,当然这种viewer大多是商业的,免费的viewer大多只是单一的支持比如docviewer,pdfviewr
所以具体用什么viewer我们不多说了,你自己看情况办(嘿嘿,主意是看你公司愿意出多钱)
你看viewer来了吧groupdview还成(不过我前面也说了,这块东西做的不错的都是商业的,这款也是商业的)
https://products.groupdocs.com/viewer/net/