关于#数据库#的问题:公司最近要将 SqlServer 迁移到 国产神通数据库上

公司最近要将 SqlServer 迁移到 国产神通数据库上,总来的说还算顺利,但是有一个问题困扰了我很久,下边是一个控制台连接神通数据库的案例

img

vals[1] 的值是2,类型也是System.Int32,为什么使用 (short) 强转会异常无效转换?

数据库类型也是 smallint类型

根据您提供的截图和描述,我猜测 转换失败的原因可能是由于 vals[1] 的值超出了 short 类型的取值范围。

在 C# 中,short 类型的取值范围为 -32,768 到 32,767,而 int 类型的取值范围为 -2,147,483,648 到 2,147,483,647。如果 vals[1] 的值超出了 short 类型的取值范围,那么使用 (short) 强制转换时就会抛出 System.OverflowException 异常。

因为short是16位的
vals数组的类型是object,此时强制转换的本质是将父类实例转换成子类的实例
那么值必须在short型的范围内才可以,不能溢出
你可以先把它强转成int,再强转成short截断多余的部分

short类型介绍
short -32,768 到 32,767 有符号 16 位整数
32为转16为可能会转换失败,反过来是ok的