0

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

3 回答 3

2

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

string selectString = @"SELECT ISNULL(MAX(Product_Id),0) FROM Products";
于 2013-08-29T21:41:10.980 回答
2

简单的答案是:

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

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

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

于 2013-08-29T21:41:32.863 回答
0
SELECT COALESCE(MAX(Product_Id), 0) FROM Products

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

SELECT COALESCE(MAX(Product_Id), 0) +1 FROM Products
于 2013-08-29T21:42:54.050 回答