vb net 将多个数据读取器结果存储到一个字符串变量中

Posted

技术标签:

【中文标题】vb net 将多个数据读取器结果存储到一个字符串变量中【英文标题】:vb net store multiple datareader results into one string variable 【发布时间】:2014-01-25 06:51:40 【问题描述】:

我有一个类似SELECT ITEM FROM DETAIL WHERE TID="1" 的查询。 这将返回像

这样的结果

m4、c1、f2、d5、k2

我正在使用DATAREADER 来获取多值结果

这是代码

Dim res as string = "SELECT ITEM FROM DETAIL WHERE TID='1'"
CMD = New mysqlCommand(res, con)
result = CMD.ExecuteReader()
while result.HasRows
  result.Read()
  array(indeks) = result("ITEM")
end while

现在改为将结果一一存储到每个数组的索引中,

array(0)=m4

array(1)=c1,.....

我想将所有这些存储到单个字符串变量中格式'm4', 'c1', 'f2', 'd5', 'k2'

格式是单引号和逗号(,)作为每个结果的分隔符,如上面的示例(逗号仅在仍有结果时出现

我怎么能在 vb.net 中做到这一点?我正在使用mysql作为数据库

更新代码

    Dim cnt As String = "select count(*) from detail where kode_faktur= '" & 1 & "' "
    Dim max As Int32
    CMD_sup = New MySqlCommand(cnt, conn.konek)
    max = Convert.ToInt32(CMD_sup.ExecuteScalar())
    CMD_sup.Connection.Close()

    Dim result As MySqlDataReader

    Dim resultString As String
    Dim isFirstResult = True

    Dim arayITEM() As String
    Dim res As String = "select kode_brg from detail where kode_faktur= '" & 1 & "' "
    CMD = New MySqlCommand(res, conn.konek)
    result = CMD.ExecuteReader()


    ReDim arayITEM(max)
    If result.HasRows Then
        For i As Integer = 0 To max - 1
            result.Read()
            arayITEM(i) = result("kode_brg")
        Next
    End If

    resultString = "'" & String.Join("','", arayITEM) & "'"
    'MsgBox("HASIL : " & resultString)

这是截图

我不需要在最后一个数组元素的末尾使用分隔符 (,'')

【问题讨论】:

你尝试过字符串连接吗? 【参考方案1】:
Dim res as string = "SELECT ITEM FROM DETAIL WHERE TID='1'"
CMD = New MySqlCommand(res, con)


' Read data from database
Dim result As New ArrayList()
Dr = CMD.ExecuteReader()

' Add each entry to array list
While Dr.Read()
    ' Insert each column into a dictionary
    Dim dict As New Dictionary(Of String, Object)
    For count As Integer = 0 To (Dr.FieldCount - 1)
        dict.Add(Dr.GetName(count), Dr(count))
    Next

    ' Add the dictionary to the ArrayList
    result.Add(dict & ", ")
End While
Dr.Close()

所以,现在您可以使用这样的 for 循环遍历结果:

For Each dat As Dictionary(Of String, Object) In result
     Console.Write(dat("ColName"))
Next

非常类似于如果它只是 DataReader 的话:

While Dr.Read()
    Console.Write(Dr("ColName"))
End While

代码来自:Reference 我已将其修改为您想要的,但未经测试。 希望能帮到你。

【讨论】:

【参考方案2】:

这个怎么样:

Dim res as string = "SELECT ITEM FROM DETAIL WHERE TID='1'"
CMD = New MySqlCommand(res, con)
result = CMD.ExecuteReader()
Dim resultString as String = ""
Dim isFirstResult = True
while result.HasRows
  result.Read()
  If Not isFirstResult Then 
    resultString &= string.Format(",'0'",result("ITEM"))
  Else 
    isFirstResult = False
    resultString &= string.Format("'0'",result("ITEM"))
  End If
end while

或者如果你想继续使用数组但又需要单字符串版本,你可以使用String.Join转换数组:

Dim resultString As String = "'" & String.Join("','", array) & "'"

String.Join 足够聪明,只有在存在下一个元素时才添加分隔符。所以上述两种方法都应该产生相同的结果。

【讨论】:

谢谢你的答案,兄弟。我只需要将值存储到单个字符串中。当我尝试使用 msgbox MsgBox("Result: " & resstring) 显示它时。程序挂起并弹出错误。这里的boolean 变量角色是什么?你能给我解释一下吗? isFirstResult 是为了避免为第一个结果添加前面的逗号(',')。它只能添加到倒数第二个结果中。 错误信息是什么?我猜不出来,这里还不错。我通过遍历字符串列表进行测试,而不是遍历 DataReader 这里是错误Value of type 'System.Collections.Generic.List(Of String)' cannot be converted to '1-dimensional array of String'。代码在我的帖子中 我已经解决了这个问题。结果我忘了redim 数组。这就是datareader 无法用值填充数组的原因。 谢谢你一如既往的帮助,兄弟(y)

以上是关于vb net 将多个数据读取器结果存储到一个字符串变量中的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET 2005 - 无法绑定到新的显示成员 - 组合框 - 数组

如何从 VB.NET 中的 USB 端口获取数据

VB.NET - 一个查询中的多个结果集?

将数据加载到 DataGridViewComboBoxColumn VB.NET

如何从 C# 读取 VB.NET 项目中的“app.config”文件

VB.net 使用存储过程插入多个相关表。只有第一个表接收插入的行