循环遍历DataRow并遇到诸如的类型
DataRow dr; dr["someString"] dr["someInteger"] dr["somedata"]
将它们纳入相应数据类型的最佳方法是什么?dr ["foo"]只是一个通用对象.
另外,这些是否可以轻松转换为可空类型?dr ["someInteger"]可能为null.
从DataRow读取时,您最大的敌人是空值.在a中DataRow
,当值为null时,它不等于null:它等于DBNull.Value
.
if(DBNull.Value == null) { // Will never happen }
除非你知道你的字段不能为空,否则施放是不安全的.例如,如果数据为DBNull,则以下示例将失败:
string name = (string)dr["Name"];
如果可以使用LINQ扩展,则可以包含引用System.Data.DataSetExtensions
和命名空间System.Data
以及调用
string name = dr.Field("Name");
如果你不能使用LINQ,那么你必须回过头来检查null值
string name = null; if(!dr.IsNull("Name")) name = (string)dr["Name"];
或者您可以像这样编写自己的Field函数:
public static T GetValue(object value) { if (value == null || value == DBNull.Value) return default(T); else return (T)value; }
并以这种方式获得你的价值:
string name = GetValue(dr["Name"]);