从数据表里读出NULL值,怎么忽略

zjyyxxzx 2014-11-12 10:28:53
我现在多表建立视图查询
然后当读到某个字段是NULL值时候,系统提示错误“制定转换无效”该怎么修改?
源代码如下

private Yddlinf GetYddlByRow(DataRow row)
{
Yddlinf yddl = new Yddlinf();
yddl.PatientInfoId = (int)row["PatientInfoId"];
yddl.SeatHoursPerday = (int)row["SeatHoursPerday"];
yddl.DislikeSport = (string)row["DislikeSport"];
yddl.FavoriteSportId = (int)row["FavoriteSportId"];
yddl.SportTimeId = (int)row["SportTimeId"];
yddl.SportFrequencyPerWeekId = (int)row["SportFrequencyPerWeekId"];

return yddl;
}



读取代码如下:

if (IsPostBack == false)
{
Id = Int32.Parse(Request.QueryString["id"]);
YddlMgmt mgmt = new YddlMgmt();
Yddlinf yddl = mgmt.GetYddlById(Id);

SeatHoursPerday.Text = yddl.SeatHoursPerday.ToString();
DislikeSport.Text = yddl.DislikeSport.ToString();
FavoriteSportId.Text = yddl.FavoriteSportId.ToString();
SportTimeId.Text = yddl.SportTimeId.ToString();
SportFrequencyPerWeekId.Text = yddl.SportFrequencyPerWeekId.ToString();


}

...全文
261 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjyyxxzx 2014-11-14
  • 打赏
  • 举报
回复
解决了
引用 18 楼 yenange 的回复:
?:三元表达式前面是条件,后面两者是结果,而且后两者一定得是同类型。 你是初学者吧?你问的问题太初级。其实你不应该上来问的,看书思考比发贴强,多按书上代码敲例子,多看人家代码 你一直纠结于你的一两行代码,有思考过我们的答复和代码吗? 即使我们可帮你解答 但于你成长和进步无益
吉普赛的歌 2014-11-13
  • 打赏
  • 举报
回复
?:三元表达式前面是条件,后面两者是结果,而且后两者一定得是同类型。
你是初学者吧?你问的问题太初级。其实你不应该上来问的,看书思考比发贴强,多按书上代码敲例子,多看人家代码

你一直纠结于你的一两行代码,有思考过我们的答复和代码吗?
即使我们可帮你解答 但于你成长和进步无益
phommy 2014-11-13
  • 打赏
  • 举报
回复
DBNull.Value是赋值不给int的,到底怎么办要由你根据需要来定,无非就是把变量改成int?类型,或是null视为0,反正要加判断
殘丿__花 2014-11-13
  • 打赏
  • 举报
回复
Convert.ToString()代替.ToString()
exception92 2014-11-13
  • 打赏
  • 举报
回复
如果你非得写那些 让人看着比较清晰的 三元运算符 就用#2的方法。
exception92 2014-11-13
  • 打赏
  • 举报
回复
要从根源解决问题,就不会在cs代码中做出修改。修改你的view sql语句,例如
select isnull(name,'') ,isnull(age,0) from table
zjyyxxzx 2014-11-13
  • 打赏
  • 举报
回复
我是问jsxl.HardToSleep = row["HardToSleep"] == DBNull.Value ? bool.FalseString :(bool)row["HardToSleep"];这个写法又有问题了,该怎么修改啊?大哥,帮我看看
引用 16 楼 yenange 的回复:
[quote=引用 15 楼 zjyyxxzx 的回复:] 现在碰到bool值 jsxl.HardToSleep = row["HardToSleep"] == DBNull.Value ? bool.FalseString :(bool)row["HardToSleep"];这个写法又有问题了,该怎么修改啊
public static DateTime GetDateTime(DataRow dr, string fieldName, DateTime replaceValue)
        {
            if (dr.IsNull(fieldName))
                return replaceValue;
            return Convert.ToDateTime(dr[fieldName]);
        }
public static object GetValue(DataRow dr, string fieldName, object replaceValue) 
        {
            if (dr.IsNull(fieldName))
                return replaceValue;
            return dr[fieldName];
        }
布尔类型的, 可以用上面的 GetValue 后转一下 , 如我前面发的图就可以了。 其实你应该多思考, 这个问题不难解决的[/quote]
吉普赛的歌 2014-11-13
  • 打赏
  • 举报
回复
引用 15 楼 zjyyxxzx 的回复:
现在碰到bool值 jsxl.HardToSleep = row["HardToSleep"] == DBNull.Value ? bool.FalseString :(bool)row["HardToSleep"];这个写法又有问题了,该怎么修改啊
public static DateTime GetDateTime(DataRow dr, string fieldName, DateTime replaceValue)
        {
            if (dr.IsNull(fieldName))
                return replaceValue;
            return Convert.ToDateTime(dr[fieldName]);
        }
public static object GetValue(DataRow dr, string fieldName, object replaceValue) 
        {
            if (dr.IsNull(fieldName))
                return replaceValue;
            return dr[fieldName];
        }
布尔类型的, 可以用上面的 GetValue 后转一下 , 如我前面发的图就可以了。 其实你应该多思考, 这个问题不难解决的
zjyyxxzx 2014-11-13
  • 打赏
  • 举报
回复
现在碰到bool值 jsxl.HardToSleep = row["HardToSleep"] == DBNull.Value ? bool.FalseString :(bool)row["HardToSleep"];这个写法又有问题了,该怎么修改啊
引用 13 楼 yenange 的回复:
[quote=引用 12 楼 zjyyxxzx 的回复:] jsxl.AnxietyDate = row["AnxietyDate"] == Null? "" : (DateTime)row["AnxietyDate"]; 如果是时间的话,怎么转换呢
其实楼主啊,你可能并不知道什么叫可空类型…… 你可以去查一下吧。 当然, 你不懂也可以应付这样的情况。 不过, 你得分门别类地去处理,  至于这些方法怎么处理, 你自己写吧, 更合你的要求。  最后那个参数, 就是null或者转换失败时的缺省值 [/quote]
  • 打赏
  • 举报
回复
/// <summary>
        /// 从DataReader中读取可空对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static Nullable<T> GetNullable<T>(this IDataReader dr, string key)
            where T : struct
        {
            return dr[key] == null || dr[key] == DBNull.Value ? (Nullable<T>)null : (T)dr[key];
        }
        /// <summary>
        /// 当DataReader读取对象为空时,返回defaultValue
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <param name="key"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static T GetDefaultWhileNullable<T>(this IDataReader dr, string key, T defaultValue)
        {
            return dr[key] == null || dr[key] == DBNull.Value ? defaultValue : (T)dr[key];
        }
        /// <summary>
        /// 从DataReader中读取字符串并除前后空白字符后
        /// </summary>
        /// <param name="dr"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetTrimedString(this IDataReader dr, string key)
        {
            return dr[key].ToString().Trim();
        }
吉普赛的歌 2014-11-13
  • 打赏
  • 举报
回复
引用 12 楼 zjyyxxzx 的回复:
jsxl.AnxietyDate = row["AnxietyDate"] == Null? "" : (DateTime)row["AnxietyDate"];
如果是时间的话,怎么转换呢


其实楼主啊,你可能并不知道什么叫可空类型……
你可以去查一下吧。

当然, 你不懂也可以应付这样的情况。
不过, 你得分门别类地去处理, 



至于这些方法怎么处理, 你自己写吧, 更合你的要求。 
最后那个参数, 就是null或者转换失败时的缺省值

zjyyxxzx 2014-11-13
  • 打赏
  • 举报
回复
jsxl.AnxietyDate = row["AnxietyDate"] == Null? "" : (DateTime)row["AnxietyDate"]; 如果是时间的话,怎么转换呢
shoppingli 2014-11-13
  • 打赏
  • 举报
回复
引用 8 楼 zjyyxxzx 的回复:
[quote=引用 2 楼 caozhy 的回复:] yddl.PatientInfoId = row["PatientInfoId"] == null ? 0 : (int)row["PatientInfoId"];
但是还是原来的错误,“指定的转换无效”,麻烦帮我看看!
“”
		private Yddlinf GetYddlByRow(DataRow row)
		{
            Yddlinf yddl = new Yddlinf();
            yddl.PatientInfoId = row["PatientInfoId"] == null?0:(int)row["PatientInfoId"];
            yddl.SeatHoursPerday = row["SeatHoursPerday"] == null?0:(int)row["SeatHoursPerday"];
            yddl.DislikeSport = row["DislikeSport"] == null?"":(string)row["DislikeSport"];
            yddl.FavoriteSportId = row["FavoriteSportId"] == null?0:(int)row["FavoriteSportId"];
            yddl.SportTimeId = row["SportTimeId"] == null?0:(int)row["SportTimeId"];
            yddl.SportFrequencyPerWeekId = row["SportFrequencyPerWeekId"] == null?0:(int)row["SportFrequencyPerWeekId"];
            

            return yddl;
		}

[/quote] 1.用sql,改成isnull(xxx,'') as xxx 2.C#程序两个判断 row["PatientInfoId"] == DBNull.Value || row["PatientIntfold"] == null ,上面出现这个错误是实体属性与数据库字段的类型不相符,查看一下哪个转换出错了
zjyyxxzx 2014-11-13
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
几种解决方案: 1. sql解决, isnull(xxx, 0) as xxx 2. C#中判断 为null时如何处理 3. 将字段改为 int? 类型; 其实最主要还是你的需求, 到底是否需要可空类型—— int?
我的要求就是从数据库里读出数据,碰到NULL值,显示出来就变成“”就行
zjyyxxzx 2014-11-13
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
几种解决方案: 1. sql解决, isnull(xxx, 0) as xxx 2. C#中判断 为null时如何处理 3. 将字段改为 int? 类型; 其实最主要还是你的需求, 到底是否需要可空类型—— int?
能否帮我看看,谢谢了
zjyyxxzx 2014-11-13
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
yddl.PatientInfoId = row["PatientInfoId"] == null ? 0 : (int)row["PatientInfoId"];
但是还是原来的错误,“指定的转换无效”,麻烦帮我看看!
“”
		private Yddlinf GetYddlByRow(DataRow row)
		{
            Yddlinf yddl = new Yddlinf();
            yddl.PatientInfoId = row["PatientInfoId"] == null?0:(int)row["PatientInfoId"];
            yddl.SeatHoursPerday = row["SeatHoursPerday"] == null?0:(int)row["SeatHoursPerday"];
            yddl.DislikeSport = row["DislikeSport"] == null?"":(string)row["DislikeSport"];
            yddl.FavoriteSportId = row["FavoriteSportId"] == null?0:(int)row["FavoriteSportId"];
            yddl.SportTimeId = row["SportTimeId"] == null?0:(int)row["SportTimeId"];
            yddl.SportFrequencyPerWeekId = row["SportFrequencyPerWeekId"] == null?0:(int)row["SportFrequencyPerWeekId"];
            

            return yddl;
		}

吉普赛的歌 2014-11-13
  • 打赏
  • 举报
回复
几种解决方案: 1. sql解决, isnull(xxx, 0) as xxx 2. C#中判断 为null时如何处理 3. 将字段改为 int? 类型; 其实最主要还是你的需求, 到底是否需要可空类型—— int?
threenewbee 2014-11-12
  • 打赏
  • 举报
回复
yddl.PatientInfoId = row["PatientInfoId"] == null ? 0 : (int)row["PatientInfoId"];

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧