/// <summary>
/// 读取文件保存到Oracle数据库(支持超大文件)
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="tableName">数据库表名</param>
/// <param name="fieldName">二进制字段名</param>
/// <param name="fieldId">查询字段名</param>
/// <param name="data">多媒体对象</param>
/// <param name="operateUser">当前操作账户id</param>
/// <param name="errMsg">错误消息</param>
/// <returns></returns>
public bool OracleUpload(string filePath, string tableName, string fieldName, string fieldId, ATTACHMENT_Data data, string operateUser, out string errMsg)
{
errMsg = "";
bool b = false;
using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read))
{
long totalSize = fs.Length;
int maxLength = 0;
int.TryParse(configurations["MaxRequestLength"].Value, out maxLength);
if (totalSize > maxLength * 1024 * 1024)
{
errMsg = "上传文件[" + totalSize / (1024 * 1024) + "M]大于上传限制[" + maxLength + "M],不允许上传";
return b;
}
using (OracleConnection con = new OracleConnection(SQLHelperForOra._connStr))
{
con.Open();
OracleCommand cmd = con.CreateCommand();
OracleTransaction tran = con.BeginTransaction();
cmd.Connection = con;
cmd.Transaction = tran;
cmd.CommandType = CommandType.Text;
OracleLob tempLob = OracleLob.Null;
try
{
cmd.CommandText = string.Format("BEGIN INSERT INTO {0}(ID,TABLENAME,TABLEID,ATTACHTYPE,ATTACHNAME,ATTACHSIZE,ATTACHAUTHOR,MEDIATYPE,ATTACH,OPERDATE,REMARK)VALUES(:ID,:TABLENAME,:TABLEID,:ATTACHTYPE,:ATTACHNAME,:ATTACHSIZE,:ATTACHAUTHOR,:MEDIATYPE,EMPTY_BLOB(),:OPERDATE,:REMARK);INSERT INTO SYS_USEROPERATELOG(USERID,LOGCONTENT)VALUES(:USERID,:LOGCONTENT);END;", tableName);
string vLogcontent = "添加多媒体资料[" + data.ID + "]";
int i = 0;
DateTime dtime;
OracleParameter[] paras = {
DBHelper.CreateInParameter("ID", OracleType.VarChar,32,data.ID),
DBHelper.CreateInParameter("TABLENAME", OracleType.VarChar, 50, data.TABLENAME),
DBHelper.CreateInParameter("TABLEID", OracleType.VarChar, 32, data.TABLEID),
DBHelper.CreateParameter("ATTACHTYPE", OracleType.VarChar, 20, data.ATTACHTYPE,type => !string.IsNullOrEmpty(type)),
DBHelper.CreateParameter("ATTACHNAME", OracleType.VarChar, 50, data.ATTACHNAME,name => !string.IsNullOrEmpty(name)),
DBHelper.CreateInParameter("ATTACHSIZE", OracleType.Double, 10, totalSize),
DBHelper.CreateParameter("ATTACHAUTHOR", OracleType.VarChar, 50, data.ATTACHAUTHOR,author => !string.IsNullOrEmpty(author)),
DBHelper.CreateParameter("MEDIATYPE", OracleType.Number,2, data.MEDIATYPE,mtype => int.TryParse(mtype,out i)),
DBHelper.CreateParameter("OPERDATE", OracleType.DateTime, data.OPERDATE,date => DateTime.TryParse(date,out dtime)),
DBHelper.CreateParameter("REMARK", OracleType.VarChar, 200, data.REMARK,remark => !string.IsNullOrEmpty(remark)),
DBHelper.CreateInParameter("USERID", OracleType.VarChar,32,operateUser),
DBHelper.CreateInParameter("LOGCONTENT", OracleType.VarChar,2048,vLogcontent)
};
cmd.Parameters.Clear();
cmd.Parameters.AddRange(paras);
cmd.ExecuteNonQuery();
cmd.CommandText = string.Format("SELECT {0} FROM {1} WHERE {2}='{3}' FOR UPDATE NOWAIT", fieldName, tableName, fieldId, data.ID);