大家對將DataRow轉成實體對象並不陌生,轉成實體的時候一般都會加上這個判斷 if (row["字段名"] != null && row["字段名"].ToString() != "") ,這個寫法會存在一個問題,當row不存在這個字段時就會拋出異常,導致程序崩潰,這種情況在數據庫頻繁地修改出現的頻率高,因為修改數據庫時,代碼里面轉成實體的方法就不適用了,基於業務的不同可能存在多個轉成實體的方法,這樣修改數據庫時,並修改代碼的同時很容易遺漏修改,導致程序崩潰,特別是需求經常變動的項目(改數據庫)。所以個人建議在判斷里面加多一個邏輯條件:
if (row.Table.Columns.Contains("字段名") && row["字段名"] != null && row["字段名"].ToString() != "") //row.Table.Columns.Contains("字段名") 是判斷row中是否存在該字段,存在返回true,否則返回 false
這個邏輯條件可以避免當row不存在該字段是出現的錯誤。
代碼例子
實體類:
1 public class User 2 { 3 public int UserId { get; set; } 4 public string UserName { get; set; } 5 public int Age { set; get; } 6 }
轉成實體類方法:
1 User userModel=new User(); 2 if (row.Table.Columns.Contains("UserId") && row["UserId"] !=null && row["UserId"].ToString() !="") 3 { 4 userModel.UserId = Convert.ToInt32(row["UserId"]); 5 } 6 if (row.Table.Columns.Contains("UserName") && row["UserName"] != null && row["UserName"].ToString() != "") 7 { 8 userModel.UserId = Convert.ToInt32(row["UserName"]); 9 } 10 if (row.Table.Columns.Contains("Age") && row["Age"] != null && row["Age"].ToString() != "") 11 { 12 userModel.UserId = Convert.ToInt32(row["Age"]); 13 } 14 return userModel; 15 }
如有不足之處,歡迎指正