当返回一个null值作为Nullable时,会出现"指定的转换无效"的错误。
当返回一个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日