我遇到了一些問題,我的一個ASP.NET 2.0應用程序的連接字符串。有些情況下,我會得到一個ConnectionString屬性尚未初始化問題,這是隨機發生的,並且沒有任何理由。ASP.NET連接字符串
我的連接字符串實際上來自web服務,因爲不同類型的用戶根據他們的用戶級別提供了不同的連接字符串集。
我迄今所做的是這樣的:
我有一個母版頁(mstr.page
)和背後對應的代碼(mstr.page.vb
)。
在我的母版頁,我找回最初的連接字符串,並同一存儲到一個會話變量,即
Session("ConnString") = "RetrievedConnectionString"
現在,在我的網頁之一,讓我們說page1.aspx.vb
,我使用公共共享功能,從一個類(名爲MyClass.vb
),並在我的page1.aspx.vb
中使用它。
一些代碼以供參考:
[MyClass.vb]
Imports System.Web
NameSpace ClassNameSpace
Public Class Admin
Protected Shared da as New DataAccess()
Public Shared Function MYFunction() as String
'Execute some sql statements here, using the DataAccess
stringToReturn = Ctype(da.ExecuteScalar("SQLCommand"), String)
Return stringToReturn
End Function
End Class
End NameSpace
[DataAccessClass.vb]
Public Class DataAccess()
Private m_ConStr As String = ""
Public Sub New()
m_ConStr = HttpContext.Current.Session("ConnString")
End Sub
'Some methods for SQL statement execution (ExecuteQuery, ExecuteScalar)
End Class
[Page1.aspx.vb]
Imports ClassNameSpace
Protected Sub Page_Load(....) Handles Me.Load
Dim strValue as String = Admin.MyFunction()
End Sub
我已經把上面的代碼向您展示的東西是怎麼回事的一些粗略的想法。
基本上,功能Admin.MyFunction()
有時會失敗,因爲在數據訪問類中,連接字符串似乎已經丟失了其值(空白或無)。
這已經困擾了我很長一段時間了。
我希望有人能指出我正確的方向來解決這個問題。基本上,我希望每個訪問Web應用程序的用戶檢索到的連接字符串始終保持不變,並在任何地方使用。會話變量似乎不是最合適的,因爲當ASP.NET回收它的過程時,會話會丟失。
順便說一下,我最初通過Web服務的母版頁檢索connectionstring。當條件是會話變量丟失時,我試圖在數據訪問類中放置相同的檢索函數,但我認爲我的應用程序在回收過程中無法連接到Web服務。
任何意見,將不勝感激這一點。
更新這個:
我試圖用會話變量並設置模式狀態服務器,但顯然這是我現在用某些DLL不能序列,因此我又回到了起點。
有沒有更好的方法來做到這一點?
我做事先檢查會話變量來獲取連接字符串的值。當它是Null或Nothing或Empty時,我所做的是嘗試再次從Web Service檢索連接字符串,但由於回收正在進行,因此無法訪問Web服務。 – Batuta 2009-02-26 15:33:43