gpt4 book ai didi

.net - 如何使用相同的代码从 DataRow 或 DataReader 读取数据?

转载 作者:行者123 更新时间:2023-12-02 17:51:29 26 4
gpt4 key购买 nike

目前,我正在使用加载了简单数据库“选择”查询的 SqlDataReader。每行代表一个领域对象,所以我像这样膨胀每个对象:

Dim loadedItems As New List(Of Item)
Dim dr As SqlDataReader = GetItemsDataReader()
While dr.Read()
Dim item As Item = GetItemFromData(dr)
loadedItems.Add(item)
End While

我编写的 GetItemFromData 方法如下所示:

Private Function GetItemFromData(dr As SqlDataReader) As Item
Dim loadedItem As New Item()
loadedItem.ID = dr("ID")
loadedItem.Name = dr("Name")
'etc., etc.'
Return loadedItem
End Function

在某些情况下,我必须从 DataRow 而不是 SqlDataReader 读取数据。但是代码是完全一样的!当我查看我的 GetItemFromData 方法时,我想在 dr 参数中接受更通用的对象类型,以便我可以处理 DataReaderDataRow 相同,因为如果我编写一个旨在使用 DataRow 的代码,我将在方法中编写完全相同的代码。有办法吗?

最佳答案

我能想到的唯一方法是包装一些类并实现一个接口(interface)——类似于:

Interface IIndexer
Default ReadOnly Property Item(ByVal index As String)
End Interface

Class DataReaderWrapper
Implements IIndexer

Private ReadOnly _reader As IDataReader

Public Sub New(reader As IDataReader)
_reader = reader
End Sub

Public ReadOnly Property Item(index As String) As Object Implements IIndexer.Item
Get
Return _reader(index)
End Get
End Property
End Class

Class DataRowWrapper
Implements IIndexer

Private ReadOnly _row As DataRow

Public Sub New(row As DataRow)
_row = row
End Sub

Public ReadOnly Property Item(index As String) As Object Implements IIndexer.Item
Get
Return _row(index)
End Get
End Property
End Class

然后您必须在将行或阅读器传递给您的方法之前包装它:

Private Function GetItemFromData(indexer As IIndexer) As Item
Dim loadedItem As New Item()
loadedItem.ID = indexer("ID")
loadedItem.Name = indexer("Name")
'etc., etc.'
Return loadedItem
End Function

Dim i As Item = GetItemFromData(New DataRowWrapper(dr))

关于.net - 如何使用相同的代码从 DataRow 或 DataReader 读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com