在新舊系統交替的尷尬期,本來的系統是
ASP-----COM+(VB6)-------DB
會變成
ASP/ASP.NET-----COM+(VB6/VB.NET)-----DB
這樣新舊混用的階段(系統龐大,不太可能全部改寫成.NET再上線)
在這樣的尷尬期裡,上次小喵提到在ASP.NET呼叫VB6/VB.NET所撰寫的元件,他的使用釋放方式是不同的。這次來聊聊用ASP呼叫新的VB.NET撰寫的元件的問題
其實啟動新舊元件的寫法是一模一樣的,最大的問題在於,ASP呼叫VB6的元件,當元件執行完後,會自動的釋放掉,但是用ASP呼叫VB.NET開發的元件,卻會讓元件在執行完成時,沒有完全的回收釋放。如果元件是讀取資料那還沒關係,慘的是如果呼叫的元件是維護資料,由於元件並沒有運轉完成並回收。因此整個維護時的Transaction並沒有釋放掉。這會造成其他的程式讀取資料時,因為還被Lock而一直等待著。
因此如果VB.NET所撰寫的元件必須要讓ASP或者VB6的元件呼叫的時候,就必須額外加入手動的SetComplete與SetAbort的動作。相關的程式碼請參考以下
Public Function ChgData(Byval Fld1 as String,Byval Key1 as String) As String
Dim ConnStr as String = "連接字串"
Using Conn as New SqlConnection(ConnStr)
Try
Dim SqlTxt as String = "Update Table1 Set Fld1=@Fld1 Where Key1=@Key1 "
Dim Cmmd as New SqlCommand(SqlTxt,Conn)
Cmmd.Parameters.AddWithValue("@Fld1",Fld1)
Cmmd.Parameters.AddWithValue("@Key1",Key1)
Cmmd.ExecuteNonQuery()
Return "Success"
ContectUtil.SetComplete() '增加這個手動的SetComplete
Catch ex as Exception
Return "False"
ConTectUtil.SetAbort() '增加這個手動的SetAbort
Throw New Exception(ex.Message)
End Try
End Using
End Function
留言列表