2014-07-14 50 views
1

我想填充我的請求使用IDataReader,但對於某些屬性的值從數據庫返回爲空,然後會引發異常,因爲它不喜歡null。IDataReader運行時錯誤

public static void Populate(IDataReader datareader, Request request) 
    { 
     request._requestID = datareader.IsDBNull(datareader.GetOrdinal("RequestID")) ? null : (int?)datareader.GetInt32(datareader.GetOrdinal("RequestID")); 
     request._appversion = datareader.GetString(datareader.GetOrdinal("AppVersion")); 
     request._apprequestguid = datareader.IsDBNull(datareader.GetOrdinal("AppRequestGUID")) ? null : datareader.GetString(datareader.GetOrdinal("AppRequestGUID")); 
     request._sourceip = datareader.IsDBNull(datareader.GetOrdinal("SourceIP")) ? null : datareader.GetString(datareader.GetOrdinal("SourceIP")); 
     request._cli = datareader.IsDBNull(datareader.GetOrdinal("CLI")) ? null : datareader.GetString(datareader.GetOrdinal("CLI")); 
     request._handsetid = datareader.IsDBNull(datareader.GetOrdinal("HandsetID")) ? null : datareader.GetString(datareader.GetOrdinal("HandsetID")); 
     request._service = datareader.IsDBNull(datareader.GetOrdinal("Service")) ? null : datareader.GetString(datareader.GetOrdinal("Service")); 
     request._requestrespcode = datareader.IsDBNull(datareader.GetOrdinal("RequestRespCode")) ? null : datareader.GetString(datareader.GetOrdinal("RequestRespCode")); 
     request._fraudmatchid = datareader.IsDBNull(datareader.GetOrdinal("FraudMatchID")) ? null : (int?)datareader.GetInt32(datareader.GetOrdinal("FraudMatchID")); 
     request._action = datareader.IsDBNull(datareader.GetOrdinal("Action")) ? null : datareader.GetString(datareader.GetOrdinal("Action")); 
     request._detail = datareader.IsDBNull(datareader.GetOrdinal("Detail")) ? null : datareader.GetString(datareader.GetOrdinal("Detail")); 
     request._apprespcode = datareader.IsDBNull(datareader.GetOrdinal("AppRespCode")) ? null : datareader.GetString(datareader.GetOrdinal("AppRespCode")); 
     request._createddttm = datareader.IsDBNull(datareader.GetOrdinal("CreatedDttm")) ? null : (DateTime?)datareader.GetDateTime(datareader.GetOrdinal("CreatedDttm")); 
     request._modifieddttm = datareader.IsDBNull(datareader.GetOrdinal("ModifiedDttm")) ? null : (DateTime?)datareader.GetDateTime(datareader.GetOrdinal("ModifiedDttm")); 
    } 

我試過添加,但是當我調試它沒有達到if語句。

 if (request._appversion.Equals(null)) 
     { 
      request._appversion = string.Empty; 
     } 

什麼代碼可以添加代碼,以便它不會因數據庫中的空值而中斷?

回答

1

你可以試試這個方法:

request._detail = Convert.ToString(datareader.Item("Detail")); 

它應該工作,因爲Convert.ToString(Convert.DBNull) = String.Empty

參考:

+0

我不明白你的意思。請提供一個小例子嗎? – jeffry

+0

@jeffry:用'request._detail'開頭的行代替上面提供的行。以類似的方式替換從數據讀取器中檢索字符串的其他行。發回結果。 – Neolisk

+1

嗨,謝謝。這工作。 – jeffry