日期:2008-02-27  浏览次数:20520 次

Aiyiweb.Com提示:.NET开发者常会忽略的几个错误,这篇文章不只对.NET开发者的老手有协助,同样对哪些有经验,也带来一些启示和参考.

在运用Visiol studio.NET 开发Web 使用程式中,开发者常常会遇到一些问题:如我开发好的程式,在开发环境下测试没问题,怎样一搬到使用环境下,就会有问题? 不是程式的无法运转,就是程式的效率慢的同蜗牛在爬, 这种情况在.NET的老手中尤其常见。我不知道为什么,一些引见.NET开发的书本里援用的例子代码,也对此问题视而不见,尤其让我郁闷的是一些我喜欢的书,如:<<ADO.NET技术内幕>>,<<ASP.NET2.0高级编程(第4版 )>>,这两本都是清华大学出版社出版的, 有一本书更蹩脚<<Visual Basic.Net 专业项目实例开发>>,我建议大家还是不要看了吧,免的浪费时间和精力。

这篇文章不只对.NET开发者的老手有协助,同样对哪些有经验,也带来一些启示和参考。

他们会遇到什么样的问题,我不妨总结给大家:

1. 数据库连接超时

2. 创建的对象尽管用,不管释放

3. 调试(Debug)模式下编译后,就用于使用环境中了

4. 实际作业模式分享

上面的问题就像毒瘤,积累到一定程度就迸发,且影响深远。

一、数据库连接超时篇

若要知道数据库连接超时问题,先看下面一段代码:

[Sample-01]:
Public Shared Function getOEMPN(ByVal psPN As String, ByRef OEMPN As String) As BSResult
0001 Dim clsResult As New BSResult
0002 Try
0003 clsResult.ResultID = -1
0004 Dim dtResult As New DataTable
0005 Dim Sql As String = String.Empty
0006 Dim clsOraDb As New clsOraClienDb
0007 Dim strConn As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
0008 clsOraDb.Open(strConn) ‘这里Open后,后面看不到 clsOraDb.Close
0009 Sql = "SELECT SATBMMBRND.OEMPN FRUNO FROM SATBMMBRND WHERE SATBMMBRND.MATNO = :MATNO"
0010 Dim params() As OracleParameter = {New OracleParameter("MATNO", psPN)}
0011 If clsOraDb.FillDataTable(Sql, dtResult, params) = False Then
0012 Return clsResult
0013 End If
0014 If dtResult Is Nothing Then
0015 Return clsResult
0016 End If
0017 If dtResult.Rows.Count > 0 Then
0018 OEMPN = dtResult.Rows(0)("FRUNO").ToString()
0019 Else
0020 OEMPN = ""
0021 End If
0022 clsResult.ResultID = 1
0023 Return clsResult
0024 Catch ex As Exception
0025 clsResult.ResultID = -1
0026 Return clsResult
0027 End Try
End Function

对上述代码行的部分解释:


0006:援用数据库连接的类;
0008:打开数据库连接;

然后,整个函数你再找不到关闭数据库连接的动作,是要等着操作系统来释放吗? 有人就说啦,看起来好像没有什么大不了的,这仅仅是一个函数而已; 数据库打开连接,未关闭不会影响到整个使用程式; 果真是这样吗?

让我们谈谈数据库连接的问题,在Oracle数据库里,普通默认的数据库连接数最多也就100多来个,不会超过200个,即便你改变这个连接数,但无论怎样,它的连接数是无限的,不可能无限地供你耗费。

在Web这个程式里,它不只不会自动关闭数据库连接,象这样的函数还会每次调用,都会重新用掉一个数据库连接; 如果象这样的函数很多的话,你就等着一个错误警告页面弹出来,如Database Connection Timeout...等讯息。