2013-01-24 85 views
1

我試圖插入一些數據到sql服務器,但我收到錯誤消息,如「違反PRIMARY KEY約束'PK_login1'。無法在對象中插入重複鍵'dbo .login1'語句已被終止。「我試圖從表中刪除主鍵約束,之後我發現它將多於兩個類似的數據插入表中。我的代碼是違反PRIMARY KEY約束'PK_login1'。不能在對象'dbo.login1'中插入重複鍵'

protected void btn_Submit_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     SqlCommand cmd; 
     str = "Insert into login1 values ('" + txtbx_Uname.Text + "', '" + txtbx_Pwd.Text + "', '" + txtbx_Email.Text + "', '" + txtbx_Dob.Text + "', " + txtbx_Phone.Text + ")"; 
     con.Open(); 
     cmd = new SqlCommand(str, con); 
     cmd.ExecuteNonQuery(); 
     lbl_Error.Visible = true; 
     lbl_Error.Text = "Registration Success"; 
     int n = Convert.ToInt32(cmd.ExecuteScalar()); 
     if(n==1) 
      Response.Redirect("Login.aspx"); 
     con.Close(); 
    } 
    catch 
    { 
     lbl_Error.Visible = true; 
     lbl_Error.Text = "SQL Server Error. Pleaase try after sometime"; 
    } 
} 
+0

什麼是你的主鍵 –

+0

@COLDTOLD我使用的電子郵件地址作爲主鍵 – Pritam

+1

那麼你必須檢查是否有相同的電子郵件用戶做插入 –

回答

1

您正在使用 cmd.ExecuteNonQuery();int n = Convert.ToInt32(cmd.ExecuteScalar());這將在這裏做同樣的工作。 如果您想要插入到表中的新記錄的狀態,則將查詢更改爲存儲過程,或使用另一個查詢來查找包含所提及字段的記錄數。

請嘗試以下代碼。

protected void btn_Submit_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlCommand cmd; 
      str = "Insert into login1 values ('" + txtbx_Uname.Text + "', '" + txtbx_Pwd.Text + "', '" + txtbx_Email.Text + "', '" + txtbx_Dob.Text + "', " + txtbx_Phone.Text + ")"; 
    " _  
    & "SELECT @@IDENTITY AS int32;" 
      con.Open(); 
      cmd = new SqlCommand(str, con);  
     int n = Convert.ToInt32(cmd.ExecuteScalar()); 

      if(n==1) 
      { 
    lbl_Error.Visible = true; 
      lbl_Error.Text = "Registration Success"; 
       Response.Redirect("Login.aspx"); 
      con.Close(); 
      } 
    } 
     catch 
     { 
      lbl_Error.Visible = true; 
      lbl_Error.Text = "SQL Server Error. Pleaase try after sometime"; 
     } 

} 

希望這能解決問題。

+0

嗨,你能再次檢查這個代碼嗎?其實,我無法理解這段代碼。什麼是「_&」SELECT @@ IDENTITY AS int32;「在str和if後面的語句之後,我認爲只有一個代碼是」lbl_Error.Visible = true;「會執行嗎?請您再次編輯此代碼嗎? – Pritam

+0

請查看已更新的代碼@@ IDENTITY將返回最後一個標識值,如果沒有行受到影響,它將返回null。代碼的問題在於您使用的是執行查詢和執行標記,它將插入記錄兩次。 –

+0

謝謝親愛的。現在我可以理解這個錯誤,非常感謝。 – Pritam

0

PRIMARY KEY約束唯一標識數據庫表中的記錄。

主鍵必須包含唯一值。

主鍵列不能包含NULL值。

每個表應該有一個主鍵,每個表只能有一個主鍵。

插入

之前,您需要檢查新插入值出現在數據庫或沒有。如果數據庫中沒有數據,則將新值插入數據庫,否則向用戶發送消息「對於給定輸入,數據已存在」。

相關問題