2012-01-11 55 views
1

以下代碼有問題。 NextIPID()方法只需查看SQL Server中的一個表,該表返回字段IPID的最大值,然後向其中添加1,以獲取序列中的下一個數字。C#ExecuteScalar() - 必須小於Infinity?

public int NextIPID() 
    { 
     string strConnect = BuildConnectionString(); 
     SqlConnection linkToDB = new SqlConnection(strConnect); 
     linkToDB.Open(); 
     string sqlStat = "SELECT MAX(IPID) FROM tblInterestedParties;"; 
     SqlCommand sqlCom = new SqlCommand(sqlStat, linkToDB); 
     int intNextIPID = (Int32)sqlCom.ExecuteScalar(); 
     linkToDB.Close(); 
     return intNextIPID + 1;        
    } 

不過,我不斷收到錯誤消息

「當從多家鑄造,值必須小於無窮的數」。

我懷疑這是因爲該表目前是空的,但後來我期待執行標量返回'0',因此向其添加一個將意味着該方法返回下一個值,即1.然而,這不會發生。

協助非常感謝。

+3

是什麼,當你直接在manamgement工作室或類似的運行SQL返回?你可以(也應該)測試你的期望...... – Chris 2012-01-11 12:39:24

+1

你也可以看看Using語句(http://msdn.microsoft.com/en-us/library/yh598w02.aspx)。這將確保像連接對象這樣的東西能夠正確處理。 – Chris 2012-01-11 12:46:42

回答

8

如果表爲空,則查詢不會返回0,它將返回NULL。你可以使用是

SELECT ISNULL((SELECT MAX(IPID) FROM tblInterestedParties), 0) 
+0

謝謝 - 好的和簡單的解決方案 - 工作的一種享受。 – PJW 2012-01-11 12:41:50

4

變化:

string sqlStat = "SELECT MAX(IPID) FROM tblInterestedParties;"; 

到:

string sqlStat = "SELECT ISNULL(MAX(IPID), 0) FROM tblInterestedParties;"; 
相關問題