2015-09-04 91 views
0

使用MVC 2,MySQL的接收 「主鍵重複enty」

public ActionResult Register() 
    {   
     string name = Request.Form["name"]; 
     string password = Request.Form["password"]; 

     ViewData["name"] = name; 
     ViewData["password"] = password; 
     // Pasa los datos al ViewData, hace el insert 
     MySqlCommand cmd = new MySqlCommand("INSERT INTO tbl_alumnos(Nombre, Apellido) values('"+name+"','"+password+"')", cn); 
     try 
     { 
      // Intenta conectarse e insertar los datos 
      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      return View("~/Views/Inicial/Inicial.aspx"); 
     } 
     catch (Exception ex) 
     { 
      // si no puede, error 
      ViewData["ex"] = ex; 
      System.Diagnostics.Debug.WriteLine(ex); 
      return View("Error"); 
     } 
    } 

這是從控制器 我的代碼和我的錯誤代碼是:

羅sentimos;產生錯誤的過程。 MySql.Data.MySqlClient.MySqlException(0x80004005):在MySql.Data.MySqlClient.MySqlStream.ReadPacket()上的鍵「PRIMARY」的重複條目'MySql.Data.MySqlClient.NativeDriver.GetResult(Int32 & affectedRow,Int64 & insertedId )在MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId,Int32 & affectedRows,Int64 & insertedId)at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId,Boolean force)at MySql.Data.MySqlClient.MySqlDataReader.NextResult ()at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()at MvcApplication1.Controllers.ValidarController.Register()在E:\ Proyecto \ TestsDByAjax \ MvcApplication1 \ Controllers \ ValidarController.cs中:第61行

線61表示cmd.ExecuteNonQuery()

+0

首先,請不要以明文存儲密碼。這個應用程序可能只是你正在學習的東西,可能永遠不會投入生產,但很快就會破壞這個非常糟糕的習慣。其次,清理你的輸入。使用參數而不是通過串聯創建SQL語句,以避免SQL注入。最後,我猜測'Nombre'是你的主鍵,因此你試圖插入一個重複的,因此錯誤信息的影響。 –

+0

是的,這是一個測試應用程序,嗯,我有一個名爲DNI的主鍵,而不是Nombre – MiGu3X

+0

您是否在'DNI'中添加了值?每個記錄獨一無二? –

回答

0

我的意思是,我有一個答案已經什麼是錯的,我只是不知道你想用它做什麼?

"INSERT INTO tbl_alumnos(Nombre, Apellido) values('"+name+"','"+password+"')" 

在上面的聲明中,將名稱和密碼插入表中。你聲稱另一個領域,即DNI是桌上的主鍵。你顯然不會插入任何東西到DNI。如果字段DNI具有身份插入,則不會對上述語句有任何問題。但你可能不這樣做,這就是爲什麼它抱怨。所以,如果你要提供獨特的DNI,你會好的

+0

「INSERT INTO tbl_alumnos(DNI,Nombre,Apellido)values(''+ DNI +'','」+ name +「','」+ password +「')」//這是因爲DNI是主鍵並且需要一個值! :) – MiGu3X

+0

是@ MiGu3X但是在現代系統中,越來越多的人在某些特殊領域看到身份種子爲PK值和唯一鍵。例如,'pkUsers,userName'。 'pkUsers'將用於連接。例如,在'Log'表中你可以有'LoggedBy'字段。 'LoggedBy'將是'pkUsers'的外鍵。該字段會自動生成序列號,如1,2,3 ...雖然'userName'將應用唯一密鑰,因此不會有兩個用戶具有相同的名稱。它不會在連接中使用,只能在'Where'子句中使用。這裏的要點 - 如果可以的話,你可以讓系統創建你的PK。然後,沒有DNI w的陳述 –