簡體   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