【发布时间】:2019-12-12 00:01:41
【问题描述】:
我有一个返回 4000 条记录的存储过程
SELECT
cast(Number as bigint) as Number
FROM TableTest
此查询运行良好并返回结果
但是当我在 C# 中这样做时
public static MDTSearchResult MDTSearchResultReader(SqlDataReader rdr)
{
MDTSearchResult r = new MDTSearchResult();
{
r.person = new person()
{
Number = (long)rdr["Number"]
}
}
return r;
}
我收到一条错误消息,指出指定的强制转换无效,在此
我检查了返回数据集中所有记录的长度(列号),它们的长度都是10,都是大整数。
还有其他原因吗?
我还在 VS 中进行了调试,发现它通过了前 500 条记录(我确实停止了,因为它太耗时了。)
谢谢
【问题讨论】:
-
在您的查询中,您将列名别名为
Test,但在您的代码中,您将其引用为Number。 -
在你的演员周围放置一个 Try/Catch 块到 Long。然后在“catch”部分放一个断点,这样你就停在正确的记录上,值无效?
-
如果您复制粘贴了实际代码,则在 Number = line 之后缺少一个右花括号。
-
对不起,我不得不更改列名,它们在应用程序和 SPROC 中匹配
-
@S.Gray
specified cast not valid确实是 SQL Server 错误。表示Number的内容有误。该字段的类型是什么以及导致问题的内容是什么?如果字段具有文本类型(例如 varchar)为什么?那只会导致错误