close

在新舊系統交替的尷尬期,本來的系統是
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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 11 的頭像
    11

    冠霖的部落格

    11 發表在 痞客邦 留言(0) 人氣()