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

VB.NET窗体加载Chart控件报错:字符串转Integer无效及约束异常

类型转换报错(Conversion from string "Date Booked" to type 'Integer' is not valid)修复方案
  • 触发原因:OleDbDataReader的GetString()、GetInt32()等强类型读取方法仅支持传入列的整数索引,你直接传入列名字符串,系统尝试将字符串转为整数索引失败,触发类型转换错误。
  • 附带错误:你使用的查询语句SELECT BookingID, RoomType, Revenue, DateBooked FROM tblRoomBookings未查询Price字段,后续调用READ.GetInt32("Price")即使索引传对也会找不到列报错。
  • 修复代码:
    首先修改查询语句,补充Price字段:
QRY = "SELECT BookingID, RoomType, Revenue, DateBooked, Price FROM tblRoomBookings ORDER BY BookingID ASC"

再修改读取逻辑,通过GetOrdinal方法先获取列索引再读取值:

While READ.Read
    Dim dateBooked = READ.GetDateTime(READ.GetOrdinal("DateBooked"))
    Dim price = READ.GetInt32(READ.GetOrdinal("Price"))
    chtSalesAndRevenue.Series("Revenue").Points.AddXY(dateBooked, price)
End While
约束冲突报错(System.Data.ConstraintException)修复方案
  • 触发原因:强类型数据集NewHotelDataSet中tblRoomBookings表定义的约束规则(非空、唯一键、外键)和实际数据库读取的数据不匹配,常见场景包括:
    • 数据库字段存在Null值,但数据集中对应字段设置为不允许Null
    • 数据集设置了主键,但数据库表中存在重复主键值
    • 数据集定义的字段名、字段类型和实际数据库表不匹配,比如代码中用到的_Check_In字段需确认和数据库字段对应关系
  • 临时排查方案:关闭数据集约束检查,验证是否为约束导致的问题:
Private Sub PlotChart()
    Dim TA As New NewHotelDataSetTableAdapters.tblRoomBookingsTableAdapter
    Dim TB As New NewHotelDataSet.tblRoomBookingsDataTable
    ' 临时关闭约束检查
    TB.EnforceConstraints = False
    TA.Fill(TB)

    chtSalesAndRevenue.Series(0).Points.Clear()

    For i = -364 To 0
        Dim revenueOfDay As Single = 0
        For H As Integer = 0 To TB.Rows.Count - 1
            Dim T As NewHotelDataSet.tblRoomBookingsRow = TB.Rows(H)
            If T._Check_In = Now.Date.AddDays(i) Then
                revenueOfDay += T.Revenue
            End If
        Next
        chtSalesAndRevenue.Series(0).Points.AddXY(Now.Date.AddDays(i), revenueOfDay)
    Next
End Sub
  • 永久修复:打开数据集设计器,逐一对比tblRoomBookings的字段定义、约束规则和实际数据库表的结构,修正不一致的配置即可。
冗余逻辑优化建议

你当前在窗体Load事件中写了两次图表数据加载逻辑,第一次直接读取数据库往Series("Revenue")加数据,第二次调用PlotChart往Series(0)加数据,二者逻辑重复且可能因为系列索引不对应引发冲突,建议删掉Load事件中Try...Catch包裹的读取数据库加图表点的逻辑,仅保留PlotChart调用即可。

内容的提问来源于stack exchange,提问作者xxtuemonkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:36:01