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

SQL Server Int转字符串时出现强制转换无效错误的求助

问题分析与解决

你遇到的“强制转换无效”错误,核心原因是SQL Server的Int类型和.NET中short(Int16)的类型不匹配,具体来说有这两个关键点:

1. 装箱对象的类型转换限制

SQL Server里的Int是32位整数(对应.NET的int/Int32),当从数据库读取Code列时,返回的object实际上是一个装箱后的Int32值。.NET不允许直接将装箱的Int32强制转换为short——跨整数类型的装箱对象直接强转是不被支持的。

2. 潜在的数值范围溢出风险

即使你的Code值都在short的有效范围(-32768 ~ 32767)内,直接强转仍会报错;如果有值超出这个范围,后续还会触发溢出异常。


解决方案

这里有几种靠谱的解决方式,按推荐优先级排序:

方式一:先转成int再转short

先把数据库读取到的object转换为对应的int,再转成short,绕过装箱对象的类型限制:

items.SubItems.Add(GetStringCode((short)(int)dr["Code"]).ToString());

方式二:使用Convert.ToInt16更安全

Convert类会自动处理装箱对象的类型转换,还能在转换前做范围检查(如果超出short范围会抛出OverflowException,方便你排查数据问题):

items.SubItems.Add(GetStringCode(Convert.ToInt16(dr["Code"])).ToString());

方式三:优化映射逻辑(长期优雅方案)

既然你是用存储过程把Code映射为字符串,其实可以考虑:

  • 把GetStringCode的参数改成int,直接匹配SQL Server的Int类型,省去转换步骤;
  • 或者在数据库层面用枚举映射表维护Code和字符串的对应关系,查询时直接关联表返回字符串,省去客户端的转换和存储过程调用,性能和可维护性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:58