簡體   English   中英

違反 PRIMARY KEY 約束

[英]Violation of PRIMARY KEY constraint

我正在嘗試記錄唯一標識符,因此我無法承受我的 ID 的重復記錄

當我嘗試更新名為Clients的 SQL Server 表時,我收到一個看起來像這樣的錯誤。

違反主鍵約束“PK_clients”。 無法在 object 'db_owner.clients' 中插入重復鍵。

代碼如下所示:

public void Subscribe(string clientID, Uri uri)
{
    clientsDBDataContext clientDB = new clientsDBDataContext();
    var client = new ServiceFairy.clientURI();
    client.clientID = clientID;
    client.uri = uri.ToString();
    clientDB.clientURIs.InsertOnSubmit(client);
    clientDB.SubmitChanges();
}            

任何想法我如何 go 來解決這個問題,所以我可以更新我的行,我想做的就是當一行存在時只更新關聯的 URI,如果它不存在提交一個新的 clientID +網址,

謝謝

約翰

您要做的是首先檢查現有記錄,如果不存在,添加新記錄。 您的代碼將始終嘗試添加新記錄。 我假設您使用的是 Linq2Sql(基於InsertOnSubmit )?

public void Subscribe(string clientID, Uri uri)
{
    using(clientsDBDataContext clientDB = new clientsDBDataContext())
    {
        var existingClient = (from c in clientDB.clientURIs
                              where c.clientID == clientID
                              select c).SingleOrDefault();

        if(existingClient == null)
        {
            // This is a new record that needs to be added
            var client = new ServiceFairy.clientURI();
            client.clientID = clientID;
            client.uri = uri.ToString();
            clientDB.clientURIs.InsertOnSubmit(client);
        }
        else
        {
            // This is an existing record that needs to be updated
            existingClient.uri = uri.ToString();
        }
        clientDB.SubmitChanges();
    }
}

您需要獲取現有的object 並更新其uri屬性,然后調用clientDB.SubmitChanges() 您現在擁有的代碼非常明確地要求它插入一條新記錄。

大概這樣的事情會起作用:

using (clientsDBDataContext clientDB = new clientsDBDataContext()) {
    var client = clientDB.clientURIs.Where(c => c.clientID == clientID).Single();
    client.uri = uri.ToString();
    clientDB.SubmitChanges();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM