繁体   English   中英

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

[英]How to get a new id when there is no records in database?

当我运行此方法GetNewID()时,它应该从数据库中返回最大Product_Id +1。 因此,如果数据库中的最大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;
    }

没有记录时,使查询返回零而不是null:

string selectString = @"SELECT ISNULL(MAX(Product_Id),0) FROM Products";

简单的答案是:

SELECT ISNULL(MAX(Product_Id), 0) FROM Products

但是,实施此方法的方式可能充满危险。 例如,您是否考虑过两个并发进程通过该代码运行,一个紧接着另一个,但在第一个记录插入数据库之前?

根据您的数据库,使用自动生成的ID或GUID可能更好。

SELECT COALESCE(MAX(Product_Id), 0) FROM Products

您也可以在查询中添加1:

SELECT COALESCE(MAX(Product_Id), 0) +1 FROM Products

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM