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

VB.NET中Stocks类型转Integer无效问题及代码求助

问题排查与修复方案

错误根源

你遇到的“无法将Stocks类型转换为Integer类型”错误,出现在这一行代码:

Dim GetStock As Integer = sservice.GetStock2(getstocks)

原因是GetStock2函数返回的是完整的Stocks实体对象,但你试图把它赋值给Integer类型的变量,类型不匹配导致报错。

修复步骤

1. 修改GetStock2函数,直接返回库存数量

将函数的返回类型改为Integer,并查询时直接返回QTY_STOCK的值,而不是整个Stocks对象:

Public Function GetStock2(ByVal Obj As Stocks) As Integer
    Dim sql = "SELECT QTY_STOCK FROM Stocks WHERE CodeProduct=@CodeProduct and BARCODE=@Barcode and COLORCODE=@Colorcode and SIZE=@Size"
    Using _conn = New OleDbConnection(DbContext.GetOledbConnectionString())
        ' 使用参数化查询避免SQL注入
        Return _conn.QueryFirstOrDefault(Of Integer)(sql, New With {
            .CodeProduct = Obj.CodeProduct,
            .Barcode = Obj.Barcode,
            .Colorcode = Obj.Colorcode,
            .Size = Obj.Size
        })
    End Using
End Function

2. 保留原函数逻辑的替代方案(不推荐)

如果不想修改GetStock2的返回类型,需要在调用时获取对象的QTY_STOCK属性:

' 调整变量类型为Stocks
Dim GetStockObj As Stocks = sservice.GetStock2(getstocks)
' 增加空值判断,避免空引用异常
Dim GetStock As Integer = If(GetStockObj IsNot Nothing, GetStockObj.QTY_STOCK, 0)

额外优化建议

  • 杜绝SQL注入:当前代码用字符串拼接生成SQL语句,存在严重的SQL注入风险,建议所有数据库操作都改用参数化查询。
  • 增加空值校验:查询库存对象时,要判断FirstOrDefault()是否返回null,防止空引用异常。
  • 事务包裹操作:库存扣减和单据插入是关联操作,建议用数据库事务包裹整个流程,确保数据一致性(比如插入单据失败时,库存不会被错误扣减)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:17:42