VB.net语言编程,反复调用SQL语句编写的数据读取函数来读取数据库Access中的数据,出现崩溃的问题

各位大神!我用VB.net语言编程,用SQL语言的Select语句读取数据库Access中的数据,由于数据库中的数据非常多(有几百个),我就将读取数据的SQL代码集成为一... 各位大神!
我用VB.net语言编程,用SQL语言的Select语句读取数据库Access中的数据,由于数据库中的数据非常多(有几百个),我就将读取数据的SQL代码集成为一个函数,读取数据时反复调用该函数得到数据库中的数据。代码如下:
Private Function ReturnReadData(ByVal AimZiDuanName As String, ByVal TableName As String, ByVal TiaoJianZiDuanName As String, ByVal JiLuName As String) As String
Dim myConStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\Users\lafox\Desktop\外部参数.accdb;Persist Security Info=False"
Dim myCon As New OleDb.OleDbConnection(myConStr)
Dim mySelectQuery As String = "Select " & AimZiDuanName & " from " & TableName & " where " &
TiaoJianZiDuanName & "='" & JiLuName & "'"

Dim myCommand As New OleDb.OleDbCommand(mySelectQuery, myCon)
myCommand.Connection.Open()
Dim myReader As OleDb.OleDbDataReader = myCommand.ExecuteReader
While myReader.Read
If myReader.Item(0) Is System.DBNull.Value Then
Return ""
Else
Return myReader.Item(0)
End If
myReader.Close()
myCon.Close()
End While
End Function

现在在一个窗体的代码窗口中我写了几个过程(Sub),假设为SubA,SubB,SubC,SubD,SubE,每个过程“依次”调用上述函数(ReturnReadData)来数据读取。假设每个过程调用100次,上述五个过程则需要调用500次。
但问题是不管这五个过程谁先执行(假设先执行SubC,SubD,再执行SubA,SubB,SubE),总是只能调用有限次数的ReturnReadData函数(比如230次),函数调用到231次时就退出崩溃了。
我想是不是计算机的内存不够用还是什么原因?百思不得其解!请各位高手支支招,在下不胜感激!
展开
 我来答
gameahui
2014-03-05 · TA获得超过101个赞
知道小有建树答主
回答量:133
采纳率:0%
帮助的人:123万
展开全部
下面这段代码中,myReader,myCon的关闭应在WHILE循环外。这还不是主要问题,如果你只读取首行首列不要用OleDbDataReader,直接用myCommand.ExecuteScalar就可以了,只要判断一下myCommand.ExecuteScalar返回是否为nothing就行。效率会高很多。
While myReader.Read
If myReader.Item(0) Is System.DBNull.Value Then
Return ""
Else
Return myReader.Item(0)
End If
myReader.Close()
myCon.Close()
End While
更多追问追答
追问
首先谢谢你的热心回答!我是从数据库的多个数据表中读取的数据,每次读的数据也不一定是首行,所以没用ExecuteScalar。

另外,myReader,myCon的关闭放在WHILE循环外,还是一样的问题。

是不是每执行完一次循环得释放一下内存啊?感觉好怪啊!
追答
在这个WHILE循环中只返回了第一行的第一列,没必要用循环呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lhyAiralhy
2014-03-06 · TA获得超过469个赞
知道小有建树答主
回答量:327
采纳率:0%
帮助的人:262万
展开全部
你可以将new的对象尝试拿到外面作为全局变量来使用,不断的new对象会导致内存增加,一般在同时存在1000个对象的时候,系统就会崩溃了,如果你不想放到全局,就应该增加 对象 = nothing来彻底释放资源
追问
我觉得你的说法是正确的,今天加群咨询了下,将New的对象用Using就行了,比如Using myCon As New OleDb.OleDbConnection(myConStr),最后End Using就行啦,这样应该和你说的释放资源一个道理。谢谢你了!
追答
也谢谢你,共同学习~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式