当返回一个null值作为Nullable时,会出现"指定的转换无效"的错误。

32 浏览
0 Comments

当返回一个null值作为Nullable时,会出现"指定的转换无效"的错误。

在我的SQL数据库中有一个如下的视图:

CREATE VIEW MyView AS
(SELECT ChangeType FROM MyTable) UNION ALL
(SELECT NULL AS ChangeType FROM MyTable)

其中ChangeType的类型为TINYINT。然后在我的C#代码中,我有以下的类:

[Table(Name = "MyView")]
public class MyView
{
    [Column]
    public Nullable ChangeType;
}

它被用作如下:

var table = dataContext.GetTable();
var elements = table.ToArray();

当这段代码运行时,我得到了以下的异常:

[InvalidCastException: Specified cast is not valid.]
System.Data.SqlClient.SqlBuffer.get_Int32() +6393860
Read_MyView(ObjectMaterializer`1 ) +3404
System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +42
System.Linq.Buffer`1..ctor(IEnumerable`1 source) +488
System.Linq.Enumerable.ToArray(IEnumerable`1 source) +104
MyCodeHere

如果我将UNION语句的第二部分更改为以下内容:

(SELECT CONVERT(INT,NULL) AS ChangeType FROM MyTable)

相同的代码就可以很好地运行。

为什么会有“强制转换无效”的错误?为什么int不能直接读取TINYINT的值?

admin 更改状态以发布 2023年5月21日
0
0 Comments

尝试使用

[Column]
    public Nullable ChangeType; //for int type
    public Nullable ChangeType; //for smallint type

0