在.net中給Oracle上傳文件超過一定大小出錯的問題

在.net中,上傳文件可以直接實例化一個OracleParameter參數,這個參數的類型爲 OracleType.Blob類型,可以直接將二進制文件的byte[]類型的數組直接賦值給這個參數的Value值。但是在實際使用中,出了一點問題,當文件的大小大於1M(好像是的),執行存儲過程會報參數錯誤。說明了這樣給參數賦值是有侷限的,參考了msdn的文檔,發現給Oracle參數賦二進制的值的確不能這樣賦值,現在將msdn的例子貼出來,裏面加了我的註釋說明
//實例化數據庫鏈接,並打開
OracleConnection conn = new OracleConnection("server=MyServer; integrated security=yes;");
conn.Open();
//啓動一個事務
OracleTransaction tx = conn.BeginTransaction();
構造一個sql命令對象,並指定這個命令的事務對象
OracleCommand cmd 
= conn.CreateCommand();
cmd.Transaction 
= tx;
//這裏是關鍵,他定義了一個命令對象的t-sql語句,通過dmbs_lob來創建一個零時對象,這個對象的類型爲blob,並存放在變量xx中,然後將xx的值付給外傳參數tmpblob
cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
//構造外傳參數對象,並加入到命令對象的參數集合中
cmd.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
//構造OracleLob對象,他的值爲tmpblob外傳參數的值
OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
//指定tempLob的訪問模式,並開始操作二進制數據
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
//將二進制流byte數組集合寫入到tmpLob裏
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
cmd.Parameters.Clear();
cmd.CommandText 
= "myTable.myProc";
cmd.CommandType 
= CommandType.StoredProcedure;  
//創建存儲過程的Blob參數,並指定Blob參數的值爲tempLob(表示服務器上大型對象二進制數據類型),並將Blob參數加入到command對象的參數集合裏
cmd.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
cmd.ExecuteNonQuery();
tx.Commit();
像這樣操作Oracle的blob的對象沒有二進制流大小的限制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章