【发布时间】:2014-05-27 19:37:10
【问题描述】:
这是我在 stackoverflow 中的第一个问题,我是 .NET 的新手,如果是这样,请原谅我的愚蠢问题! 当我在本地测试它时没有问题。在服务器上,它开始工作良好,但一段时间后(更可能是在一些访问者访问该站点之后)它停止工作并出现此错误,大约 30 分钟后它开始工作。 这是我的代码: 后面的代码:
Dim baglanti As String = "Data Source=xxx.xxx.xxx;Initial Catalog=xxVT;Persist Security Info=True;User ID=xxx;Password=xxx"
Public mRs As SqlDataReader
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Conn As SqlConnection
Conn = New SqlConnection(baglanti)
Conn.Open()
Dim lcSQLCommand1 As New SqlCommand("Select * from Fiyatlar", Conn)
mRs = lcSQLCommand1.ExecuteReader()
End Sub
aspx 页面:
<% If Not IsNothing(mRs) Then 'I also tried with IsDBNull here, but same result.
Do While mRs.Read %>
<!--do some job with mRs-->
<%Loop
mRs.close()
end if %>
这是错误信息: 对象引用未设置为对象的实例。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
来源错误:
第 22 行: 第 23 行:
第 24 行:Do While mRs.Read%>
第 25 行:
第 26 行:
【问题讨论】:
-
我已经读过那个了。首先我确切知道原因,数据读取器将空值变为空值。但问题是:为什么它有时会变成空值,但并非总是如此?第二个问题是,即使我放了 IsNothing(IsDBNull) 控件,它仍然返回相同的错误..
-
您最好使用数据绑定控件而不是“手动”通过 SqlDataReader 运行
-
可能你是对的约翰,但由于我的数据很少,我选择了数据阅读器,这对我来说更容易。如果我找不到这个问题的解决方案,我会改变我的编码。
-
IsDBNull 没有进行空检查。它正在对您的 SqlDataReader 对 DBNull.Value 进行评估。你的空检查应该是
If not mRs Is Nothing Thenref:msdn.microsoft.com/en-us/library/tckcces5(v=vs.90).aspx