如果数据库中没有记录,如何获取新的id?

时间:2013-08-29 21:38:22

标签: c# sql database methods return

当我运行此方法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;
    }

3 个答案:

答案 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