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
相关产品推荐
相关产品推荐

