You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:36:20