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
足够聪明,只有在存在下一个元素时才添加分隔符。所以上述两种方法都应该产生相同的结果。
【讨论】:
谢谢你的答案,兄弟。我只需要将值存储到单个字符串中。当我尝试使用 msgboxMsgBox("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 - 无法绑定到新的显示成员 - 组合框 - 数组
将数据加载到 DataGridViewComboBoxColumn VB.NET