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
})
posted @ 2022-05-30 14:10  宵夜没得吃  阅读(570)  评论(0)    收藏  举报