对象不能从 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