1. 程式人生 > 其它 >c# 將檔案存入到Oracle 資料庫,從資料庫中讀取檔案

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
})