当我运行此方法GetNewID()时,它应该从数据库返回最大Product_Id + 1。因此,如果数据库中的Max Product_Id为20,则下一个应为21。 这很好。
但是什么不起作用的是数据库中没有记录而且它是空的。我尝试过使用不同的select语句和一些if语句但是没有用。您对我如何解决这个问题有任何想法吗?提前谢谢。
public static int GetNewId()
{
string selectString = @"SELECT MAX(Product_Id) FROM Products";
try
{
newId= 0;
connection = new SqlConnection("Data Source=localhost\\SQLEXPRESS;Initial Catalog=DB;Integrated Security=SSPI;");
connection.Open();
SqlCommand cmdSelectLastId = new SqlCommand(selectString, connection);
newId = Convert.ToInt32(cmdSelectLastId.ExecuteScalar());
}
finally
{
if (connection != null)
{
connection.Close();
}
}
return newId + 1;
}
答案 0 :(得分:2)
当没有记录时,使查询返回零而不是null:
string selectString = @"SELECT ISNULL(MAX(Product_Id),0) FROM Products";
答案 1 :(得分:2)
简单的答案是:
SELECT ISNULL(MAX(Product_Id), 0) FROM Products
然而,您实施此方法的方式可能充满危险。例如,您是否考虑过两个并发进程通过此代码紧接着另一个进程,但是在将第一个记录插入数据库之前?
根据您的数据库,您可能最好使用自动生成的ID或GUID。
答案 2 :(得分:0)
SELECT COALESCE(MAX(Product_Id), 0) FROM Products
您也可以在查询中添加1:
SELECT COALESCE(MAX(Product_Id), 0) +1 FROM Products