编辑:见下文
我有一个Web服务,它使用一类函数来返回各种业务流程中使用的数据(通过InfoPath)。
其中一个函数接受给定的SQLCommand对象并将其执行到SQLDataReader中。现在,根据使用的SQL命令文本,这可能会返回一列或多列的一行或多行。那么这个函数的最佳类是什么才能回归轴承需要由Web服务序列化。
我现有的代码是:
Dim array As New ArrayList
Try
conCMS.Open()
Dim rdr As SqlDataReader = cmdCurrent.ExecuteReader
While rdr.Read
If rdr.VisibleFieldCount > 1 Then
Dim complexType(rdr.VisibleFieldCount - 1) As String
For rowIndex As Integer = 0 To rdr.VisibleFieldCount - 1
complexType(rowIndex) = rdr(rowIndex)
Next
array.Add(complexType)
Else
array.Add(rdr(0))
End If
End While
conCMS.Close()
Return array
Catch ex As Exception
array.Add("ERROR " & ex.Message)
End Try
Return Nothing
现在我知道这不是有效的代码,但这是一项正在进行的工作。
您可能会看到这是生成一个字符串数组来表示具有多个列的行,但是Web服务无法对其进行序列化。
真的有两件事;
提前致谢
编辑: 我设法通过简单地创建一个嵌套的arrayList来实现序列化,如下所示(doh!):
If rdr.VisibleFieldCount > 1 Then
Dim complexType As New ArrayList
For rowIndex As Integer = 0 To rdr.VisibleFieldCount - 1
complexType.Add(rdr(rowIndex))
Next
array.Add(complexType)
Else
array.Add(rdr(0))
End If
但请告诉我如何改进。
答案 0 :(得分:1)
如果您的代码在调用之前知道返回数据的模式,那么您应该返回相同形状的数据。为返回数据的每一列提供具有适当类型属性的结构或类。对于每一行,创建此类结构的实例,并从返回的列中填充属性。然后将每个实例添加到该结构的强类型列表,List(Of T)。然后返回列表。
OBTW,ArrayList是在我们在.NET中使用泛型之前创建的。今天,最好使用强类型集合而不是ArrayList,它基本上是List(Of 任何)。