C# 当数据库中没有记录时,如何获取新id?

C# 当数据库中没有记录时,如何获取新id?,c#,sql,database,methods,return,C#,Sql,Database,Methods,Return,当我运行这个方法GetNewID()时,它应该从数据库返回max Product_Id+1。因此,如果数据库中的Max Product_Id是20,那么下一个应该是21。 那很好 但不起作用的是当数据库中并没有记录时,它是空的。我尝试过使用不同的select语句和一些if语句,但都不起作用。你对我如何解决这个问题有什么想法吗?提前谢谢 public static int GetNewId() { string selectString = @"SELECT MAX

当我运行这个方法GetNewID()时,它应该从数据库返回max 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;
    }

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

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

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

string selectString = @"SELECT ISNULL(MAX(Product_Id),0) FROM Products";
答案很简单:

SELECT ISNULL(MAX(Product_Id), 0) FROM Products
然而,您实现这一点的方式可能充满了危险。例如,您是否考虑过两个并发进程在这段代码中运行,一个紧接着另一个,但在第一个进程的记录插入数据库之前

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

简单的答案是:

SELECT ISNULL(MAX(Product_Id), 0) FROM Products
SELECT COALESCE(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
您也可以在查询中添加1:

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

改为使用自动增量值。否则,您将创建一个低效的竞速条件。除此之外:
COALESCE
是您的朋友。我认为最好在数据库中创建一个序列和触发器,以解决此问题。请改用自动增量值。否则,您将创建一个低效的竞速条件。除此之外:
COALESCE
是您的朋友。我认为最好在数据库中创建一个序列和触发器,以解决此问题。+1用于满足OP的需求-但是OP可能应该使用SQL server的标识构造(标识、自动增量等)+1为了满足OP的需求-但是OP应该比我想象的更容易地使用SQL server的身份构造(身份、自动增量等),现在工作正常!我认为目前没有问题,但我会在以后的项目中考虑这个问题@user1587603非常严肃地说,使用标识字段更容易。如果你打算遵循一个最佳实践,那么尽早开始遵循它。比我想象的要容易,现在工作很好!我认为目前没有问题,但我会在以后的项目中考虑这个问题@user1587603非常严肃地说,使用标识字段更容易。如果你打算遵循一个最佳实践,那么尽早开始遵循它。