【问题标题】:Specified cast not valid Dataset指定的强制转换无效数据集
【发布时间】: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)为什么?那只会导致错误

标签: c# sql


【解决方案1】:

请试试这个:

public static MDTSearchResult MDTSearchResultReader(SqlDataReader rdr)
{
    MDTSearchResult r = new MDTSearchResult();

    do
    {
        // Not sure your MDTSearchResult definition, you are overwriting person object.
        r.person = new person();        
        r.person.Number = !rdr.IsDBNull(dr.GetOrdinal("Number")) ? Convert.ToInt64(rdr["Number"]) : 0L;
    }while (rdr.NextResult())
    return r;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2014-07-30
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多