2014-02-19 20 views
1

我在SQL存儲過程中,與編碼:試圖尋找在C#的形式從存儲過程值必須返回值

SELECT TOP 1 Intrecno FROM MainCallProblems 
ORDER BY Intrecno DESC 

,我在我的C#代碼中使用:

long oldVal = ExecuteDataReader<MainCallProblems>("spGetMainCallProblemRefNo", null, typeof(MainCallProblems));.First().Intrecno; 

請注意數據庫中的Intrecno字段是我的主鍵,一個bigint並且是一個標識(1,1)。

這用於服務,返回一個值。目前,表格中沒有任何內容可以調用,沒有數據。

那麼如何找出是否沒有數據?返回值,這也是在SQL表類型是一個長變量\ BIGINT

我曾嘗試:

long newVal = 0; 
     long oldVal = 0; 
     // Generates list to see if there is anything stored within. If not, makes the first value 1 
     List<MainCallProblems> mainCallProblemsList = ExecuteDataReader<MainCallProblems>("spGetMainCallProblemRefNo", null, typeof(MainCallProblems)); 
     if (mainCallProblemsList != null) 
     { 
      oldVal = mainCallProblemsList.First().Intrecno; 
      newVal = oldVal + 1; 
     }   
     else 
     { 
      newVal = 1; 
     } 
     return newVal; 

據說這是爲了看看有沒有在表中任何東西。如果不是,則返回是一個簡單的1.如果存在,數據將被加載,修改並返回。 但是運行時,我得到一個錯誤:

原因=「System.InvalidOperationException:序列不包含任何元素\ r \ n在System.Linq.Enumerable.First [TSource](IEnumerable`1源)\ r \ ñ在GetMainCallProblemRefNo(個)\ r \ n在GetMainCallProblemRefNoResponse

不要擔心完整的錯誤。只知道有什麼在表中,將其返回的錯誤。它甚至沒有經過if語句來分配數據

如何糾正此錯誤,而無需手動添加默認值在表中排。 IE:

insert into MainCallProblems(Assistant) 
values('Joe') 

回答

1

你得到錯誤,因爲mainCallProblemsList不是null ...但它空。並且First()要求集合中至少有一個項目。

使用Any代替:

if (mainCallProblemsList.Any()) 
{ 
    oldVal = mainCallProblemsList.First().Intrecno; 
    newVal = oldVal + 1; 
}   
else 
{ 
    newVal = 1; 
} 
+0

完美。非常感謝 –

0

我想補充一個條件像下面

if (mainCallProblemsList != null && mainCallProblemsList.Count > 0)