2014-12-09 31 views
-4

您好,我有很多問題,從C#的形式更新SQL數據庫更新SQL和得到錯誤

最前一頁:我用這個代碼,一個名爲「更新」是獲取直接從文本框的值,並填寫主SQL服務器數據庫按鈕。

SqlConnection cnt = new SqlConnection("Data Source=.;Initial Catalog=db3;Integrated Security=True"); 
        SqlCommand cmd = new SqlCommand("update phone set [email protected],[email protected],[email protected],[email protected],[email protected],[email protected]", cnt); 
        cnt.Open(); 
        cmd.Parameters.AddWithValue("@name", namebox.Text); 
        cmd.Parameters.AddWithValue("@lastname", lastbox.Text); 
        cmd.Parameters.AddWithValue("@Phone", phonebox.Text); 
        cmd.Parameters.AddWithValue("@Mobile", mobilebox.Text); 
        cmd.Parameters.AddWithValue("@Area", areabox.Text); 
        cmd.Parameters.AddWithValue("@date", datestring); 
        cmd.ExecuteNonQuery();  
        cnt.Close(); 

,但它在移動柱得到錯誤:

Violation of UNIQUE KEY constraint 'UQ__phone__5C7E359EA73D3013'. Cannot insert duplicate key in object 'dbo.phone'. The duplicate key value is (4802615).

注2:我使用這個代碼選擇並查看所選行準備編輯

1,問題解決了SQL列是唯一索引,所以我刪除了它。
2-沒有一個「其中狀態」,所以我固定太

+1

您的'WHERE'子句在哪兒?如果表格有多個行,這將始終失敗。 – 2014-12-09 12:54:03

+0

您已在手機媒體資源中添加了唯一的密鑰約束。所以如果你會嘗試添加現有的手機,那麼它會拋出這個錯誤。 – Moiz 2014-12-09 12:55:39

+0

是的表有很多行..馬丁,但我也想要當用戶點擊一行的行去編輯和保存或獲取名稱或編號直接與這樣的代碼查詢編輯。 – hamed2011 2014-12-09 12:57:10

回答

2

WHERE子句不使用因此在表中的所有行被得到更新,並因此是越來越產生的錯誤。

0

添加「WHERE Phone = @ phone」及其相關的參數命令。正如對方指出的那樣,你正在更新,但是你還沒有告訴數據庫專門關注單個記錄,所以你的命令全部更新它們。

這對第一條記錄很合適,只要它嘗試更新第二條記錄,它就會爆炸,因爲電話具有唯一約束,從而阻止具有相同數據的任何其他記錄。這是你的錯誤信息。

您需要更改更新語句以確定要更新的確切記錄。

+0

我想要數據庫專門關注記錄ID或名稱的選定行或特殊文本框中的單個記錄。 – hamed2011 2014-12-09 13:10:40

+0

通常,人們會在其表格中添加一個IDENTITY列。 dB負責其增量和唯一性。然後,你可以溝通電話上的唯一約束,並且你的更新就像更新爲SET BAR ='NERDS'WHERE CUSTOMERID = 12335「 – Jason 2014-12-09 13:13:28

+0

TNN所有我發現問題並修復! – hamed2011 2014-12-09 13:59:32

0

我想你應該設置PK或者更新手機表中的所有行。例如: :UPDATE tablename SET columName WHERE .... 我希望這會有用

+0

OP已經在此列上有獨特的,你想PK在電話列? – HaveNoDisplayName 2014-12-09 13:11:08