2012-12-17 26 views
0

我有一個在我們的ERP返回大量的可用性這種數據訪問方法:用元組繞過數據訪問方法的空返回?

public JDEItemLotAvailability GetLotAvailabilityF41021(string _lot) 
     { 
      JDEItemLotAvailability _retValue = new JDEItemLotAvailability(); 
      _retValue.Lot = _lot; 
      using (OleDbConnection con = new OleDbConnection(_ERPConfig.ConnectionString)) 
      { 
       OleDbCommand cmd = new OleDbCommand(); 
       cmd.CommandText = 
        "select max(lilotn) lilotn,max(trim(limcu)) limcu,max(lilocn) lilocn," + 
        "max(lipqoh/100) lipqoh,max(liitm) liitm,max(imlitm) imlitm," + 
        "max(concat(imdsc1,imdsc2)) as imdsc,max(imuom1) imuom1 " + 
        "from "+ _ERPConfig .AS400Library +".f41021" + " left outer join proddta.f4101 on liitm=imitm " + 
        "where lilotn = ?"; 
       cmd.Parameters.AddWithValue("@lilotn", _lot); 
       cmd.Connection = con; 
       con.Open(); 
       OleDbDataReader rdr = cmd.ExecuteReader(); 
       if (rdr.HasRows) 
       { 
        rdr.Read(); 
        if (rdr["lilotn"] != DBNull.Value) 
        { 
         _retValue.Code = rdr.GetString(rdr.GetOrdinal("imlitm")); 
         _retValue.ShortCode = (int)rdr.GetDecimal(rdr.GetOrdinal("liitm")); 
         _retValue.Description = rdr.GetString(rdr.GetOrdinal("imdsc")); 
         _retValue.PrimaryUnitCode = rdr.GetString(rdr.GetOrdinal("imuom1")); 
         _retValue.AvailableQuantity = (int)rdr.GetDecimal(rdr.GetOrdinal("lipqoh")); 
         _retValue.BranchPlant = rdr.GetString(rdr.GetOrdinal("limcu")); 
         _retValue.Location = rdr.GetString(rdr.GetOrdinal("lilocn")); 
        } 
       } 
      } 
      return _retValue; 
     } 

如果不必須行時,將返回很多已經只有一個數據字段填充的方法。多數民衆贊成在我檢查上面的商業層,如果它是成功的方式。

我不喜歡它。有人提到元組作爲解決方案。

我想我會讓我的方法返回一個tuple<MyObject, bool>例如?

添加信息:我希望能夠返回「爲什麼對象爲空?」的答案。我正在考慮返回一個對象的元組和一個指定原因的ENUM。

UPDATE:

我想我會走這條路線:

返回從數據訪問方法的空的對象引用,並有BLL方法返回一個tuple<Myobject,ENUMreason>

回答

1

如何只返回null並檢查數據層中是否有任何數據,以便從任何地方使用它,行爲將是相同的。

+0

這正是我想辯論的。要麼返回一個完整的空引用,要麼返回一個帶有空對象和ENUM結果的元組。我還需要檢查爲什麼是null以便調整我的商店行爲... – e4rthdog

+1

如果您需要知道null的原因,則需要更豐富的返回類型。包含'JDEItemLotAvailability'和一些'ReasonEnum'的自定義類型,或者'Tuple '都可以完成這項工作。我想你也可以使用輸出參數。沒有太多爭論真的。 – tomfanning

+0

再想一想,爲了防止返回null引用(如果需要的話),可以將返回類型定義爲值類型 - 即結構。 – tomfanning