我遇到了一些问题,我的一个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