VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2397|回复: 28

指定的转换无效!!在线等...

[复制链接]

1

主题

16

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-2-17 14:00:01 | 显示全部楼层 |阅读模式
下面的一段代码出现:
"System.InvalidCastException: 指定的转换无效。"        
排错提示:
"当一个数字执行强制转换时,值必须是一个小于无限大的数字
确保源类型可以转换为目标类型"

寻求帮助,马上给分,如果解释给大家解释很明白,我愿在加分!!

public IList<Bbs_PostDetailsInfo> GetPostDetails(string postid)
{
    IList<Bbs_PostDetailsInfo> postlist = new List<Bbs_PostDetailsInfo>();
    strSql = "SELECT * FROM V_Bbs_PostDetails WHERE Post_Id=" + postid;
    sdr = GetDataReader(strSql);
    while (sdr.Read())
    {
            postlist.Add(new Bbs_PostDetailsInfo(sdr.GetInt32(0), sdr.GetString(1), sdr.GetString(2), sdr.GetInt32(3),
            sdr.GetString(4), sdr.GetString(5), sdr.GetDateTime(6), sdr.GetInt32(7), sdr.GetString(8), sdr.GetDateTime(9),
            sdr.GetString(10), sdr.GetString(11), sdr.GetString(12), sdr.GetString(13), sdr.GetString(14), sdr.GetString(15),
            sdr.GetInt32(16), sdr.GetInt32(17), sdr.GetInt32(18), sdr.GetInt32(19), sdr.GetInt32(20), sdr.GetInt32(21),
            sdr.GetString(22), sdr.GetDateTime(23), sdr.GetInt32(24), sdr.GetInt32(25), sdr.GetString(26), sdr.GetInt32(27), sdr.GetInt32(28), sdr.GetInt32(29)));
    }
    sdr.Close();
    sdr.Dispose();
    return postlist;
}
回复

使用道具 举报

1

主题

16

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
 楼主| 发表于 2020-4-19 23:00:01 | 显示全部楼层
为了避免空值我改为:

public IList<Bbs_PostDetailsInfo> GetPostDetails(string postid)
        {
            IList<Bbs_PostDetailsInfo> postlist = new List<Bbs_PostDetailsInfo>();
            strSql = "SELECT * FROM V_Bbs_PostDetails WHERE Post_Id=" + postid;
            sdr = GetDataReader(strSql);
            while (sdr.Read())
            {
                postlist.Add(new Bbs_PostDetailsInfo(sdr.IsDBNull(0) ? 0 : sdr.GetInt32(0), sdr.IsDBNull(1) ? "" : sdr.GetString(1), sdr.IsDBNull(2) ? "" : sdr.GetString(2), sdr.IsDBNull(3) ? 0 : sdr.GetInt32(3),
                    sdr.IsDBNull(4) ? "" : sdr.GetString(4), sdr.IsDBNull(5) ? "" : sdr.GetString(5), sdr.GetDateTime(6), sdr.IsDBNull(7) ? 0 : sdr.GetInt32(7), sdr.IsDBNull(8) ? "" : sdr.GetString(8), sdr.GetDateTime(9),
                    sdr.IsDBNull(10) ? "" : sdr.GetString(10), sdr.IsDBNull(11) ? "" : sdr.GetString(11), sdr.IsDBNull(12) ? "" : sdr.GetString(12), sdr.IsDBNull(13) ? "" : sdr.GetString(13), sdr.IsDBNull(14) ? "" : sdr.GetString(14), sdr.IsDBNull(15) ? "" : sdr.GetString(15),
                    sdr.IsDBNull(16) ? 0 : sdr.GetInt32(16), sdr.IsDBNull(17) ? 0 : sdr.GetInt32(17), sdr.IsDBNull(18) ? 0 : sdr.GetInt32(18), sdr.IsDBNull(19) ? 0 : sdr.GetInt32(19), sdr.IsDBNull(20) ? 0 : sdr.GetInt32(20), sdr.IsDBNull(21) ? 0 : sdr.GetInt32(21),
                    sdr.IsDBNull(22) ? "" : sdr.GetString(22), sdr.GetDateTime(23), sdr.IsDBNull(24) ? 0 : sdr.GetInt32(24), sdr.IsDBNull(25) ? 0 : sdr.GetInt32(25), sdr.IsDBNull(26) ? "" : sdr.GetString(26), sdr.IsDBNull(27) ? 0 : sdr.GetInt32(27), sdr.IsDBNull(28) ? 0 : sdr.GetInt32(28), sdr.IsDBNull(29) ? 0 : sdr.GetInt32(29)));
            }
            sdr.Close();
            sdr.Dispose();
            return postlist;
        }


结果一样!
回复

使用道具 举报

1

主题

16

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
 楼主| 发表于 2020-4-20 05:30:01 | 显示全部楼层
strSql = "SELECT * FROM V_Bbs_PostDetails WHERE Post_Id=" + postid;
    sdr = GetDataReader(strSql);
顺利执行!
结果里看到特殊的值!
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-20 14:30:01 | 显示全部楼层
你把 GetString方法前也加上 判断是否为null的代码看看?
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-21 09:00:01 | 显示全部楼层
出现这种错误就是把dbnull.value转换成int或string
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-21 10:00:02 | 显示全部楼层
对了不光是这两种类型,转换成其他类型也是这种错误.
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-21 11:30:02 | 显示全部楼层
注意还有GetDateTime的地方
回复

使用道具 举报

1

主题

16

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
 楼主| 发表于 2020-4-21 13:15:01 | 显示全部楼层
能否说明白一些?

出去买点吃的

一会回来!

哈哈!
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-21 18:30:01 | 显示全部楼层
每个取值的地方都判断一下是否为DBNull.Value 这样肯定不会出错了.
回复

使用道具 举报

1

主题

16

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
 楼主| 发表于 2020-4-23 17:45:01 | 显示全部楼层
这样吗?   结果也是一样?
public IList<Bbs_PostDetailsInfo> GetPostDetails(string postid)
{
    IList<Bbs_PostDetailsInfo> postlist = new List<Bbs_PostDetailsInfo>();
    strSql = "SELECT * FROM V_Bbs_PostDetails WHERE Post_Id=" + postid;
    sdr = GetDataReader(strSql);
    DateTime strda=DateTime.Today;
    while (sdr.Read())
    {
        postlist.Add(new Bbs_PostDetailsInfo(sdr.IsDBNull(0) ? 0 : sdr.GetInt32(0), sdr.IsDBNull(1) ? "" : sdr.GetString(1), sdr.IsDBNull(2) ? "" : sdr.GetString(2), sdr.IsDBNull(3) ? 0 : sdr.GetInt32(3),
            sdr.IsDBNull(4) ? "" : sdr.GetString(4), sdr.IsDBNull(5) ? "" : sdr.GetString(5), sdr.IsDBNull(6) ? strda : sdr.GetDateTime(6), sdr.IsDBNull(7) ? 0 : sdr.GetInt32(7), sdr.IsDBNull(8) ? "" : sdr.GetString(8), sdr.IsDBNull(9) ? strda : sdr.GetDateTime(9),
            sdr.IsDBNull(10) ? "" : sdr.GetString(10), sdr.IsDBNull(11) ? "" : sdr.GetString(11), sdr.IsDBNull(12) ? "" : sdr.GetString(12), sdr.IsDBNull(13) ? "" : sdr.GetString(13), sdr.IsDBNull(14) ? "" : sdr.GetString(14), sdr.IsDBNull(15) ? "" : sdr.GetString(15),
            sdr.IsDBNull(16) ? 0 : sdr.GetInt32(16), sdr.IsDBNull(17) ? 0 : sdr.GetInt32(17), sdr.IsDBNull(18) ? 0 : sdr.GetInt32(18), sdr.IsDBNull(19) ? 0 : sdr.GetInt32(19), sdr.IsDBNull(20) ? 0 : sdr.GetInt32(20), sdr.IsDBNull(21) ? 0 : sdr.GetInt32(21),
            sdr.IsDBNull(22) ? "" : sdr.GetString(22), sdr.IsDBNull(23) ? strda : sdr.GetDateTime(23), sdr.IsDBNull(24) ? 0 : sdr.GetInt32(24), sdr.IsDBNull(25) ? 0 : sdr.GetInt32(25), sdr.IsDBNull(26) ? "" : sdr.GetString(26), sdr.IsDBNull(27) ? 0 : sdr.GetInt32(27), sdr.IsDBNull(28) ? 0 : sdr.GetInt32(28), sdr.IsDBNull(29) ? 0 : sdr.GetInt32(29)));
    }
    sdr.Close();
    sdr.Dispose();
    return postlist;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表