Database “数据读取器”已关闭,但错误显示未关闭

Database “数据读取器”已关闭,但错误显示未关闭,database,vb.net,ms-access,reader,Database,Vb.net,Ms Access,Reader,程序能够运行。但是,当单击函数按钮时,错误显示数据读取器未关闭,我确实关闭了 有什么解决办法吗 错误:已存在与此命令关联的打开的DataReader,必须先关闭它 很明显,您在某处创建了另一个数据读取器,但忽略了关闭。这演示了为什么您应该始终使用使用块来创建此类对象,因为这样您就不能忽略关闭它们,例如 Using myDataReader = myCommand.ExecuteReader() 'Read data here. End Using 'Data reader is impl

程序能够运行。但是,当单击函数按钮时,错误显示数据读取器未关闭,我确实关闭了

有什么解决办法吗

错误:已存在与此命令关联的打开的DataReader,必须先关闭它


很明显,您在某处创建了另一个数据读取器,但忽略了关闭。这演示了为什么您应该始终使用使用块来创建此类对象,因为这样您就不能忽略关闭它们,例如

Using myDataReader = myCommand.ExecuteReader()
    'Read data here.
End Using 'Data reader is implicitly closed here.
您对cmdsearch和cmdupdate使用相同的cnnoledb对象。那不好。在整个应用程序中重复使用一个连接对象不是好的做法。您需要为数据库的每次调用创建一个新的连接对象,而只是共享连接字符串

此外,MS Access在保持打开的连接读取数据时插入到表中,这是一个非常糟糕的主意。这不是Sql Server;并发性不是访问的优势。最好是1遍历整个DataReader并保留集合中插入的信息,然后在第一次连接完成时插入,或者2将所有这些合并为一条语句,执行插入并选择yes


最后。。。字符串连接?真正地我以为我们已经过去了。现在每个人都应该知道如何使用参数化查询了。这应该是他们教你的第一件事,也是你自学时遇到的第一件事。使用字符串concatention将值放入这样的查询中是非常糟糕的。。。即使是访问。

如果不发布有问题的代码,也有点难找出你做错了什么。结束后,如果插入:如果read3.IsClosed=False,那么read3.closed请添加你得到的确切错误消息。@muffi做了,但还是一样。@ChrisDunaway完成。
Using myDataReader = myCommand.ExecuteReader()
    'Read data here.
End Using 'Data reader is implicitly closed here.