VB.Net在向ORACLE存储BLOb字段时,系统内存占用很大如何分块存储

njgift 2008-07-10 04:33:31
我使用的是VS2003的VB.Net在向ORACLE存储BLOb字段时,系统内存占用很大有100多兆,我存储的文件大小为30M,
代码如下:那位高手能否知道如果分块存储(每次存储10240个字节,然后循环存储)的话内存就是马上降下来,请高手指点
Public Sub insertBidDoc(ByVal vTmpFile As String, ByVal vPrjNo As String, ByVal vSprNo As String, ByVal vSprName As String)

Dim oCnOra As New OracleConnection, objCmdOra As New OracleCommand, oAdaOra As New OracleDataAdapter, oTranOra As OracleTransaction
Dim oFileStream As FileStream
Dim iSize As Integer
Try

oFileStream = New FileStream(vTmpFile, FileMode.Open, FileAccess.Read)
iSize = oFileStream.Length

Dim byteArray(iSize - 1) As Byte

oFileStream.Read(byteArray, 0, iSize)
oFileStream.Close()
oCnOra.ConnectionString = GetOracleConStr(strConn)
oCnOra.Open()
objCmdOra.Connection = oCnOra

oTranOra = oCnOra.BeginTransaction
objCmdOra.Transaction = oTranOra
objCmdOra.CommandText = ""
objCmdOra.Parameters.Clear()
objCmdOra.CommandText = "DELETE FROM ReceiveCache_UnParse WHERE Prj_No=:Prj_No AND Spr_No=:Spr_No"
objCmdOra.Parameters.Add("Prj_No", OracleType.Char, 10).Value = vPrjNo
objCmdOra.Parameters.Add("Spr_No", OracleType.VarChar, 20).Value = vSprNo
objCmdOra.ExecuteNonQuery()

objCmdOra.CommandText = ""
objCmdOra.Parameters.Clear()
objCmdOra.CommandText = "INSERT INTO ReceiveCache_UnParse(RCP_ID,RCP_Date,Data_UnParse,Prj_No,Spr_No,Spr_Name,File_Size,File_Ext,RCP_Type) " & _
" VALUES(SEQ_RCP_ID.NEXTVAL,:RCP_Date,:Data_UnParse,:Prj_No,:Spr_No,:Spr_Name,:File_Size,:File_Ext,:RCP_Type)"
objCmdOra.Parameters.Add("RCP_Date", OracleType.Char, 19).Value = Format(Now, "yyyy-MM-dd HH:mm:ss")
objCmdOra.Parameters.Add("Data_UnParse", OracleType.Blob).Value = byteArray
objCmdOra.Parameters.Add("Prj_No", OracleType.Char, 10).Value = vPrjNo
objCmdOra.Parameters.Add("Spr_No", OracleType.VarChar, 20).Value = vSprNo
objCmdOra.Parameters.Add("Spr_Name", OracleType.VarChar, 60).Value = vSprName
objCmdOra.Parameters.Add("File_Size", OracleType.Number, 10).Value = iSize 'oFileStream.Length
objCmdOra.Parameters.Add("File_Ext", OracleType.VarChar, 255).Value = "p7s"
objCmdOra.Parameters.Add("RCP_Type", OracleType.Char, 1).Value = "1"
objCmdOra.ExecuteNonQuery()

oTranOra.Commit()
'oFileStream.Close()

Catch e As Exception
If Not oTranOra Is Nothing Then
oTranOra.Rollback()
End If
Throw e
Finally
If Not (oFileStream Is Nothing) Then
oFileStream.Close()
End If
'防止连接未显式关闭
If (Not (oCnOra.State = ConnectionState.Closed)) Then
oCnOra.Close()
oCnOra.Dispose()
End If
End Try
End Sub
...全文
72 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tracy5453 2008-07-10
  • 打赏
  • 举报
回复
BLOB字段你敢让30M的数据进来,太狠了。
收藏,你说的方法我不知道,期待高手解决。
换了我我会限制存储大小,非要存30M的就做自动运行程序放到晚上执行

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧