-6ren"> -在我的 SQL 数据库中,我有以下 View : CREATE VIEW MyView AS (SELECT ChangeType FROM MyTable) UNION ALL (SELECT NU-6ren">
gpt4 book ai didi

c# - "Specified cast is not valid"当空值返回为 Nullable

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:11 25 4
gpt4 key购买 nike

在我的 SQL 数据库中,我有以下 View :

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<int> ChangeType;
}

使用如下:
var table = dataContext.GetTable<MyView>();
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)

相同的代码运行得很好。

为什么那里的“ Actor 无效”?为什么 TINYINT 不只需阅读代替 int ?

最佳答案

Why won't the TINYINT just be read in place of int?



因为 TINYINT映射到 shortsbyte .

编辑: Looked it up它是一个无符号字节,所以使用 byte .
[Column]
public Nullable<byte> ChangeType;

您的堆栈跟踪显示 Linq2Sql 映射器调用 .get_Int32() .假设这类似于 SqlDataReader.GetInt32() 那么这意味着它将尝试读取 32 位值,不应用任何转换。

关于c# - "Specified cast is not valid"当空值返回为 Nullable<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12781045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com