处理Datarow DBNull的最佳方法
可能重复:
检查数据表中是否包含空值的最佳方法
我想知道检查DBNull的DataTable – DataRow值的方法应该是什么。
防爆
我有一个DataRow,它从行类型中获取数据库中的信息,如:
varchar,money,Int等。
应该用什么(简单而甜蜜)的方法来处理这种情况。
尝试:
foreach(DataRow row in table.Rows) { object value = row["ColumnName"]; if (value == DBNull.Value) { } else { } }
试试这个
对于varchar
string val = dr["name"].ToString();
对于int
int? val = dr["status"] == DBNull.Value ? (int?) null : Convert.ToInt32(dr["status"]);
对于Money, Decimal
执行相同操作以替换相应的.Net
类型
您可以使用这样的扩展方法;
public static T GetValue(this OracleDataReader reader, string fieldName) { T result = default(T); int index = reader.GetOrdinal(fieldName); if (reader.IsDBNull(index)) { return default(T); } if (typeof(T) == typeof(string)) { result = (T)Convert.ChangeType(reader.GetString(index), typeof(T)); } if (typeof(T) == typeof(int)) { result = (T)Convert.ChangeType(reader.GetInt32(index), typeof(T)); } if (typeof(T) == typeof(DateTime)) { result = (T)Convert.ChangeType(reader.GetDateTime(index), typeof(T)); } if (typeof(T) == typeof(byte[])) { OracleLob blob = reader.GetOracleLob(index); result = (T)Convert.ChangeType(blob.Value, typeof(T)); } return result; }
你可以使用like string title = reader.GetValue
CLR和SQL类型有明确定义的映射 ,因此问题实际上是如何有效和准确地映射这些类型。 从长远来看,最简单的方法可能是使用自动映射过程,将您的类的属性映射到DataRow
的列。 您可以自己编写或在线查找许多示例/产品(任何ORM都将此作为核心function)。
假设您仍想进行手动分配,则需要确定如何处理数据库中的空值。 您想将它们分配给相应的可空类型吗? 你想使用default(T)
吗? 你想使用另一个值(默认值可能是null的替代品)? 例如,0度的温度完全有效,但default(float) == 0
。 如果使用default(T)
,则可能无法区分零和数据库中为null的值。
一旦定义了赋值策略,就将代码放入可重用的表单(扩展方法,帮助类等)。尽可能将拆箱拆分为确切的类型,因为这将是最快的。 接下来,unbox键入,然后强制转换。 然后,使用Convert
类。
上述就是C#学习教程:处理Datarow DBNull的最佳方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1004495.html