2012-01-11 54 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;"; 
相关问题