当前位置:编程学习 > C#/ASP.NET >>

对象不能从 DBNull 转换为其他类型

public IList<MoneyCountInfo> OperMoneyCountIsZeroType(Int32 iPageCurr, Int32 iPageSize, String MonthDate,
            String KeyValue, String UserType, out Int32 totalRecords)
        {
            String Where = String.Empty;//检索条件
            //**************************根据输入的数据形成检索条件
            //*************关键字
            if (KeyValue != String.Empty && KeyValue != null)
            {
                Where += CreateWhere.CreateSqlWithWhere("(U.UserNo+IsNull(U.UserName,'')) ", KeyValue, "like");
            }
            
            //**********************用户类型。付费类型
            if (UserType != String.Empty && UserType != null)
            {
                //************付费类型
                Where += CreateWhere.CreateSqlWithWhere("C.Type", UserType, "=");
            }
            if (Where.Trim() != String.Empty)
            {
                //****************得到最终的where
                Where = CreateWhere.CreateSqlWithAnd(Where);
            }
            //********************执行存储过程
            Database db = DatabaseFactory.CreateDatabase();
            //*****************
            DbCommand cmd = db.GetStoredProcCommand("Proc_CTI_Area_Oper_UserCountIsZero");
            //**********************参数
            db.AddInParameter(cmd, "AreaCode", DbType.String, AreaCode);
            db.AddInParameter(cmd, "MonthDate", DbType.String, MonthDate);
            //*************************条件参数
            db.AddInParameter(cmd, "sWhere", DbType.String, Where);
            //**************************分页需要的参数
            db.AddInParameter(cmd, "PageCurrent", DbType.Int32, iPageCurr);
            db.AddInParameter(cmd, "Pagesize", DbType.Int32, iPageSize);
            db.AddOutParameter(cmd, "RecordCount", DbType.Int32, 8);

            //*****************************************
            IList<MoneyCountInfo> list = new List<MoneyCountInfo>(0);
            IDataReader rdr = null;
            try
            {
                using (rdr = db.ExecuteReader(cmd))
                {
                    rdr.NextResult();//用到分页。必须从下条记录开始读
                    while (rdr.Read())
                    {
                        MoneyCountInfo codeList = new MoneyCountInfo();
                        codeList.UserNo = rdr["UserNo"] == null ? String.Empty : Convert.ToString(rdr["UserNo"]);//集团编号
                        codeList.UserName = rdr["UserName"] == null ? String.Empty : Convert.ToString(rdr["UserName"]);//客户名称
                        codeList.UserType = rdr["UserType"] == null ? String.Empty : Convert.ToString(rdr["UserType"]);//付费类型
                        list.Add(codeList);
                    }
                }
            }
            catch (Exception s)
            {
                string err = s.Message + s.Source;

            }
            finally
            {
                if (rdr != null && rdr.IsClosed == false)
                {
                    rdr.Close();
                    rdr.Dispose();
                }
            }
            //if (cmd.Parameters[5].Value != DBNull.Value)
               totalRecords = Convert.ToInt32(cmd.Parameters[5].Value);
            return list;
}
在运行时

 this.GridView_UserCount.DataSource = user.OperMoneyCountIsZeroType(this.AspNetPager_User.CurrentPageIndex,
            this.AspNetPager_User.PageSize, MonthDate, KeyValue, UserType, out _totalrecordcount);
    这一行提示:对象不能从 DBNull 转换为其他类型
急等!

--------------------编程问答-------------------- 貌似不行。。 --------------------编程问答-------------------- 路过,我也碰到这个问题 --------------------编程问答-------------------- 像如下的这些判断:
rdr["UserNo"] == null 

应该是这样的:
rdr["UserNo"] == DBNull.Value;

或使用这个方法:
rdr.IsDBNull("UserNo") --------------------编程问答-------------------- 加判断,if DBNull(sth) then...... --------------------编程问答-------------------- 帮顶~ --------------------编程问答-------------------- 对象不能从 DBNull 转换为其他类型。
求结果 --------------------编程问答-------------------- 没去看你的代码。。。我遇到多DBNull的问题,找了好久找不到问题所在,后来发觉是数据库数据是空的,你去数据库看下有没空的内容,把空的列给补上,最好设置一个默认值什么的。。。。不知道你遇到的是不是我这问题。。。。 --------------------编程问答-------------------- string ss = Convert.IsDBNull(dt.Rows[0]["id"]) ? "" : dt.Rows[0]["id"].ToString();

如果为空就赋值""   不为空就直接取 --------------------编程问答--------------------  codeList.UserNo   =   rdr[ "UserNo "]   ==   null   ?   String.Empty   :   Convert.ToString(rdr[ "UserNo "]);//集团编号 
                                                codeList.UserName   =   rdr[ "UserName "]   ==   null   ?   String.Empty   :   Convert.ToString(rdr[ "UserName "]);//客户名称 
                                                codeList.UserType   =   rdr[ "UserType "]   ==   null   ?   String.Empty   :   Convert.ToString(rdr[ "UserType "]);//付费类型 
应该是你这些判断有问题
应该是这样的: 
rdr[ "UserNo "]   ==   DBNull.Value; --------------------编程问答-------------------- 7楼回答的很正确,一下就解决了我的问题。 --------------------编程问答-------------------- 对象不能从 DBNull 转换为其他类型。 学习~ --------------------编程问答-------------------- 7楼正解
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,