2017-04-07 51 views
0

所以我得到的更新聲明工作和數據庫中的記錄正在更新。然而,程序在記錄更新後會拋出一個錯誤。更新VB.Net數據庫與SQL更新聲明

錯誤

類型「System.Data.OleDb.OleDbException」未處理的異常出現在system.data.dll

附加信息:您請求表的更改沒有成功,因爲他們會在索引,主鍵或關係中創建重複值。更改包含重複數據的字段或字段中的數據,刪除索引或重新定義索引以允許重複條目,然後重試。

代碼

 Dim variable As String 
     dsConnectionM.Open() 
     variable = "UPDATE Member SET MemberID = '" & Form3.tbid.Text & "', Forename = '" & Form3.tbfn.Text & "' " 
     Dim cmd As OleDbCommand = New OleDbCommand(variable, dsConnectionM) 
     cmd.ExecuteNonQuery() 
     dsConnectionM.Close() 

I don't know if this is normal but when ran a second Access file for the database is created

This shows the contents of "Member" in the databse

EDITED

我開始使用的參數,因爲我是現在勸我得到另一個錯誤。

錯誤

類型 'System.Data.OleDb.OleDbException' 未處理的異常出現在system.data.dll

其他信息:語法錯誤在UPDATE語句。

CODE

Dim variable As String 
dsConnectionM.Open() 
variable = "UPDATE Member 
      SET Forename = @Forename, 
       Surname = @Surname, 
       DOB = @DOB, 
       Section = @Section, 
       Postcode = @Postcode, 
       HomeTel = @HomeTel, 
       MobileTel = @MobileTel, 
       AddressLine1 = @AddressLine1, 
       AddressLine2 = @AddressLine2, 
       City = @City, 
       EmailAddress = @EmailAddress, 
       P/GForename = @P/GForename, 
       P/GSurname = @P/GSurname 
      WHERE MemberID = @MemberID" 
     Dim cmd As OleDbCommand = New OleDbCommand(variable, dsConnectionM) 
     cmd.Parameters.AddWithValue("@MemberID", Form3.tbid.Text) 
     cmd.Parameters.AddWithValue("@Forename", Form3.tbfn.Text) 
     cmd.Parameters.AddWithValue("@Surname", Form3.tbsn.Text) 
     cmd.Parameters.AddWithValue("@DOB", Form3.dtpdob.Value) 
     cmd.Parameters.AddWithValue("@Section", Form3.tbsr.Text) 
     cmd.Parameters.AddWithValue("@Postcode", Form3.tbpc.Text) 
     cmd.Parameters.AddWithValue("@HomeTel", Form3.tbht.Text) 
     cmd.Parameters.AddWithValue("@MobileTel", Form3.tbmt.Text) 
     cmd.Parameters.AddWithValue("@AddressLine1", Form3.tbal1.Text) 
     cmd.Parameters.AddWithValue("@AddressLine2", Form3.tbal2.Text) 
     cmd.Parameters.AddWithValue("@City", Form3.tbc.Text) 
     cmd.Parameters.AddWithValue("@EmailAddress", Form3.tbea.Text) 
     cmd.Parameters.AddWithValue("@P/GForename", Form3.tbpgfn.Text) 
     cmd.Parameters.AddWithValue("@P/GSurname", Form3.tbpgsn.Text) 
     cmd.ExecuteNonQuery() 
     dsConnectionM.Close() 
+2

該錯誤信息是明確的,你正試圖MEMBERID在DB已經設置爲一個值,將導致主鍵/唯一約束衝突。 –

+0

這兩個語句(它更新並引發異常)不能爲真,除非您有代碼調用該隔離片段兩次。此外,這還不是長時間創建SQL的正確方法;使用SQL參數。請閱讀[問]並參加[導遊] – Plutonix

+0

您可能提出錯誤的問題[**什麼是XY問題?**](http://meta.stackexchange.com/questions/66377/what-is- the-xy-problem) –

回答

1

通常你不會UPDATE表的Pk。在您的表格ID應該是隻讀的。如果有人改變一些其他的價值,您使用ID找到你所需要的行UPDATE

variable = "UPDATE Member " & 
      "SET Forename = '" & Form3.tbfn.Text & "' " 
      "WHERE MemberID = '" & Form3.tbid.Text & "' 

和使用paramethers,其他明智的你很容易受到SQL注入

+0

使其更新where memberId =任何修復問題,但現在我將如何能夠編輯到memberID? – ItsSimplyEddie

+0

正如我所說的,你不應該在表'Members'中更新'MemberID'你可能做錯了什麼。也許試着分享你的需求和你的結果應該是什麼樣的例子。也許是你的形式的圖片。 –

+0

大家好,我更新了代碼,並得到了另一個錯誤。 – ItsSimplyEddie

0

我假設你查詢是爲了更改具有特定ID的成員的Forename字段。

在這種情況下,您的查詢應該是這樣的

UPDATE Member SET Forename = '" & Form3.tbfn.Text & "' where MemberID = '" & Form3.tbid.Text & "'