2011-08-31 81 views
0

我有一个使用SQL Server数据库的ASP.Net应用程序。我也使用ODBC来建立连接(见下文)。然后我用查询加载控件(其中很多)。ASP.NET应用程序的数据库连接(SQL Server)

这是正确的方法吗?

另外,我需要以编程方式完成大部分,而不是在设计时。

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) 
    ' Fires when the session is started 

    Session("ConnString") = "DRIVER={SQL Server};SERVER=myserver;Trusted_Connection=True;DATABASE=mydatabase" 
    Session("MyConnection") = New Odbc.OdbcConnection(Session("ConnString")) 

End Sub 
+0

您不能(也不应该)在会话中存储OdbcConnection。这是一个可随意使用的对象,需要在使用后立即释放资源,否则最终会导致资源泄漏和性能问题。 – TheCodeKing

+0

其实你可以通过使用静态类,但我不建议。那是我的第一个项目之一。 – TroyS

+0

你不能在会话中存储也许不完全准确,在你使用InProc时你可以避开它,但是你的应用程序会在负载下死掉。没有保持静态引用的原因是一样的。馊主意。最佳做法是尽快处理一次性物品。 – TheCodeKing

回答

2

我不认为节省连接对象会是非常好的做法(见下面为什么)

你就不能保存的ConnectionString在会议并重新创建的SQL Server连接Page_Load中?

Sql连接通常只能在您的请求生存期(最长)内生存,优先选择较短。一旦你不需要它,你应该关闭一个sql连接。

在整个会话中保持一个打开是不好的做法。这会使连接池非常快地耗尽可用连接。

你可以请你解释一下你的问题好一点吗?

+0

我没有打开Session_Start中的连接,只是创建了变量来保存它。但我想我明白你的意思是在页面加载中声明连接变量,如[Dim MyConnection As Odbc.OdbcConnection = CType(Session(“MyConnection”),Odbc.OdbcConnection)]。然后根据需要在页面或控件事件中打开并关闭它。它是否正确? – TroyS

+0

这就是我所说的。只在Session中保存一个变量声明没有实际意义。创建一个可以扩展(继承自)的基类并在那里进行连接处理会更容易,因此您不会在每个页面上都有重复的代码。 –

相关问题