如何将DataTable原始数据转换为Single类型数组变量?
解决方案
核心思路
从DataTable的每行中提取range1至range5字段的值,将其转换为Single类型后存入对应数组。可根据场景选择直接赋值的基础方式,或是更灵活的批量处理方式。
方式一:直接赋值(适配固定行数场景)
针对你固定查询3行数据的需求,直接提取每行的5个字段值转换为目标数组:
Imports MySql.Data.MySqlClient Public Class showitems ' 修正拼写错误:commmand → command Public command As New MySqlCommand Public adapter As New MySqlDataAdapter Public datatable As New DataTable Private Sub showitems_Load(sender As Object, e As EventArgs) Handles MyBase.Load If Db_conn() = True Then Dim sql As String = "SELECT id, range1,range2,range3,range4,range5 FROM `pioltprice` WHERE id IN (5,6,7)" command.CommandText = sql command.Connection = conn adapter.SelectCommand = command adapter.Fill(datatable) DataGridView1.DataSource = datatable ' 定义目标数组 Dim price_range1(4) As Single Dim price_range2(4) As Single Dim price_range3(4) As Single ' 提取第一行(id=5)数据 If datatable.Rows.Count >= 1 Then price_range1 = { Convert.ToSingle(datatable.Rows(0)("range1")), Convert.ToSingle(datatable.Rows(0)("range2")), Convert.ToSingle(datatable.Rows(0)("range3")), Convert.ToSingle(datatable.Rows(0)("range4")), Convert.ToSingle(datatable.Rows(0)("range5")) } End If ' 提取第二行(id=6)数据 If datatable.Rows.Count >= 2 Then price_range2 = { Convert.ToSingle(datatable.Rows(1)("range1")), Convert.ToSingle(datatable.Rows(1)("range2")), Convert.ToSingle(datatable.Rows(1)("range3")), Convert.ToSingle(datatable.Rows(1)("range4")), Convert.ToSingle(datatable.Rows(1)("range5")) } End If ' 提取第三行(id=7)数据 If datatable.Rows.Count >= 3 Then price_range3 = { Convert.ToSingle(datatable.Rows(2)("range1")), Convert.ToSingle(datatable.Rows(2)("range2")), Convert.ToSingle(datatable.Rows(2)("range3")), Convert.ToSingle(datatable.Rows(2)("range4")), Convert.ToSingle(datatable.Rows(2)("range5")) } End If Else MsgBox("Error occurred") End If End Sub End Class
方式二:批量处理(适配行数变化场景)
如果后续查询行数可能变动,用列表批量存储数组会更灵活:
Imports MySql.Data.MySqlClient Public Class showitems Public command As New MySqlCommand Public adapter As New MySqlDataAdapter Public datatable As New DataTable Private Sub showitems_Load(sender As Object, e As EventArgs) Handles MyBase.Load If Db_conn() = True Then Dim sql As String = "SELECT id, range1,range2,range3,range4,range5 FROM `pioltprice` WHERE id IN (5,6,7)" command.CommandText = sql command.Connection = conn adapter.SelectCommand = command adapter.Fill(datatable) DataGridView1.DataSource = datatable ' 用列表存储所有range数组 Dim priceRanges As New List(Of Single()) For Each row As DataRow In datatable.Rows ' 转换当前行的range1-5为Single数组 Dim currentRange As Single() = { Convert.ToSingle(row("range1")), Convert.ToSingle(row("range2")), Convert.ToSingle(row("range3")), Convert.ToSingle(row("range4")), Convert.ToSingle(row("range5")) } priceRanges.Add(currentRange) Next ' 按需取出对应数组(对应原需求的三个变量) Dim price_range1() As Single = priceRanges(0) Dim price_range2() As Single = priceRanges(1) Dim price_range3() As Single = priceRanges(2) Else MsgBox("Error occurred") End If End Sub End Class
错误处理优化
如果数据库字段可能为空或非数值类型,建议用Single.TryParse避免转换异常:
' 替换批量处理中的数组转换部分 Dim currentRange(4) As Single Single.TryParse(row("range1").ToString(), currentRange(0)) Single.TryParse(row("range2").ToString(), currentRange(1)) Single.TryParse(row("range3").ToString(), currentRange(2)) Single.TryParse(row("range4").ToString(), currentRange(3)) Single.TryParse(row("range5").ToString(), currentRange(4)) priceRanges.Add(currentRange)
内容的提问来源于stack exchange,提问作者Malith Induranga
相关产品推荐
相关产品推荐

