我在静态类“ObjectMapper”中有这个方法:
正如我们所看到的,该方法有一个带有一些项目([0])的对象“dataReader”。但是......当我调用这个方法时:
传递的参数正在丢失此记录。即使将“DataReaderToObjectList”方法从“public static”更改为“public”,该值也会丢失此数据。当我的对象有两个或多个记录时,它会被传递,但“杀死”第一个记录。如果我以“经典”方式进行,我可以正确操作dataReader。但是,一旦在应用程序中的几个地方使用它,我就需要这种方法。
答案 0 :(得分:1)
在SelectAll()中调用.Read()
繁荣的第一个记录消失了
你没有那条记录
在DataReaderToObject中
你打电话给.Read()
砰的一声,你是第二个记录
答案 1 :(得分:0)
请注意,您只能枚举SqlDataReader
对象的内容一次。这包括在Results View
预览窗口中枚举它们。在这个特定的实例中数据正在丢失,因为你在调试器中枚举它们,这会耗尽阅读器,然后使用耗尽的阅读器进入函数
我认为代码中还存在一个更基本的错误。您在同一实例上调用Read
方法两次,而不实际枚举第一次读取产生的任何数据。您可以通过移除Read
方法
SelectAll
调用来解决此问题
答案 2 :(得分:0)
我找到了解决此问题的替代解决方案(至少现在已解决):
在第1项中,我声明了一个泛型对象,它从dataReader获取属性和值,并作为参数传递(执行显式转换,如我们所见)到一个新的方法,将此对象作为SqlDataReader,如图所示在下图的第2项中。
这个新方法放在同一个静态类ObjectMapper中,但奇怪的是我能够将我的对象作为参数传递而不会丢失任何数据。 @Blam,你的理论是有道理的,但在这种情况下并没有起作用。