c# 将文件存入到Oracle 数据库,从数据库中读取文件
1 思路
存储的时候将文件转成二进制,讲数据库字段设为 BLOB ,
查询的时候 使用file 对象,创建文件
2. 文件存储
原生写法(将文件转成二进制存储到数据库中,因为我只使用excel文件,所以我此处并未保存文件名,如果要存储各种文件,请存储文件名,以便区分文件格式)
点击查看代码
OracleConnection con = OpenConn("数据库链接串");
//OracleConnection con =new OracleConnection(ConfigurationManager.AppSettings["LiZhenRpt"]);
FileStream fs = File.OpenRead(file);
byte[] imgData = new byte[fs.Length];
//WriteLogs("log", "info", "文件长度:" + imgData.Length);
fs.Read(imgData, 0, imgData.Length);
String dateStr = cdt.targetDate(cdt.date, 0);
string strInsert = $"insert into LEDRPT.ZANALYSISIMAGES(IID,IMAGE,TYPE) values('{dateStr}',:image,'DailyReportMails')";
com = new OracleCommand(strInsert, con);
OracleParameter oracleParameter = new OracleParameter("image", OracleDbType.Blob);
oracleParameter.Value = imgData;
com.Parameters.Add(oracleParameter);
com.ExecuteScalar();
//WriteLogs("log", "info", "数据库插入成功!:" + imgData.Length);
fs.Close();
con.Close();
3. 文件读取
点击查看代码
//获取指定文件路径
dealDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "repoprt");
//如果文件路径不存在就创建
if(!Directory.Exists(dealDirectory)) {
Directory.CreateDirectory(dealDirectory);
}
dealFileName = "【" + DateTime.Now.ToString("yyyyMMddHHmmss") + "】Report.xlsx";
String iid = cdt.targetDate(cdt.date, 0);
//iid = "2021-12-06 8:00:00";
String xlsxFile = $@"SELECT IMAGE FROM LEDRPT.ZANALYSISIMAGES WHERE IID = '{iid}' AND ""TYPE"" = 'DailyReportMails' AND rownum = 1";
con = OpenConn(ConfigurationManager.AppSettings["LiZhenRpt"]);
//用oracleLob类型的对象来接收,因为将返回值强制转换为字节数组会报错
com = new OracleCommand(xlsxFile, con);
byte[] arr = (byte[])com.ExecuteScalar();
//stream.Read(imageData, 0, imageData.Length);
CloseConn(con);
String finalFile = dealDirectory + @"\" + dealFileName;
FileStream f = File.Create(finalFile);
f.Write(arr, 0, arr.Length);
f.Flush();
f.Close();
4.进阶思路
可以使用dapper 的对象映射来实现更高解的写法
点击查看代码
repositry.execute("insert into LEDRPT.ZANALYSISIMAGES(IID,IMAGE,TYPE) values('2022-05-22 00:00:00',:image,'DailyReportMails')",new demo{
image = imgData
})
本文来自博客园,作者:宵夜没得吃,转载请注明原文链接:https://www.cnblogs.com/marEstrelado/p/16326599.html
学习贵在持之以恒,每日一篇,气象万千

浙公网安备 33010602011771号