2013-05-01 15 views
1

好吧,即時建立一個汽車經銷商的股票系統,有能力添加新的汽車到系統,現在我需要添加一個功能,如果經銷商類型的汽車REG已經是在數據庫中會出現一個錯誤消息框。C#數據庫接口檢查SQL重複

我該怎麼做?

繼承人的代碼:

MySqlCommand cmd = new MySqlCommand(); 

      String carManufacture = textBoxCARManufac.Text.ToUpper(); 
      String carModel = textBoxCARModel.Text.ToUpper(); 
      String carColour = textBoxCarBodColo.Text.ToUpper(); 
      int carMileage = int.Parse(textBoxCArMillea.Text); 
      int carYearReg = int.Parse(textBoxCARREGYear.Text); 
      String carReg; 
      String fuel = textBoxCARFuel.Text.ToUpper(); 
      int carEng = int.Parse(textBoxCarEngSize.Text); 
      float carprice = float.Parse(textBoxCARPrice.Text); 
      float carTaxcost = float.Parse(textBoxCArTax.Text); 

      carReg = Regex.Replace(textBox1CARregplate.Text, " ", "").ToUpper(); 
      try 
      { 
       cmd.CommandText = "INSERT INTO stockList (Manufacturer,CarModel,BodyColour,AquiredMileage,RegistartionYear,CarRegistration,FuelType,EngineSize,Price,CarTaxCost12Months) VALUES (@Manufacturer, @carModel, @carColour, @carMileage, @carYearReg, @carReg, @fuel, @carEng, @carPrice, @carTaxCost)"; 

       cmd = SDS1.Prepare(cmd); 

       cmd.Parameters.AddWithValue("@Manufacturer", carManufacture); 
       cmd.Parameters.AddWithValue("@carModel" , carModel); 
       cmd.Parameters.AddWithValue("@carColour" , carColour); 
       cmd.Parameters.AddWithValue("@carMileage" , carMileage); 
       cmd.Parameters.AddWithValue("@carYearReg" , carYearReg); 
       cmd.Parameters.AddWithValue("@carReg" , carReg); 
       cmd.Parameters.AddWithValue("@fuel" , fuel); 
       cmd.Parameters.AddWithValue("@carEng" , carEng); 
       cmd.Parameters.AddWithValue("@carPrice" , carprice); 
       cmd.Parameters.AddWithValue("@carTaxCost", carTaxcost); 


       SDS1.Query(cmd); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("ERROR: " + ex); 
      } 



     } 
+0

您應該在該字段上創建一個[**'UNIQUE CONSTRAINT' **](http://msdn.microsoft.com/zh-cn/library/ms190024.aspx)(假設您使用的是MS SQL Server) – 2013-05-01 13:43:16

+0

在數據庫的該字段上創建一個唯一約束。將引發異常。 – JosephHirn 2013-05-01 13:43:19

+0

REGISTRATION NUMBER是一個主鍵,它是唯一的,當你輸入一個副本時,它會在控制檯輸出一個sql錯誤,所以它看到重複。但我想要一個消息框的形式的錯誤 – lparry1992 2013-05-01 14:33:08

回答

1

我建議你首先要確保沒有兩個完全相同的車輛登記在數據庫中。

我假設,汽車註冊是您場景中的唯一鍵。您可以在您的表上創建一個​​約束。由於這可能是你定義的列在表中,你應該創建一個在您的汽車登記列所謂primary key:現在

ALTER TABLE stockList 
ADD CONSTRAINT PK_stockList_CarRegistration PRIMARY KEY (CarRegistration) 

,如果插入第二次相同的密鑰,數據庫將拋出例外。

您需要捕獲此異常並很好地告訴用戶他做了什麼錯誤。

如果您想要一個舒適的用戶界面,您可能希望從數據庫中加載所有現有的汽車註冊,並告訴他,在用戶輸入所有其他字段之前存在此存在。

+0

這就是我試圖做的,在控制檯輸出它說,找到了重複。我怎樣才能讓它顯示在即時通訊應用上 – lparry1992 2013-05-01 14:34:15

+0

'Console.WriteLine'是你自己的代碼,你可以把它改成任何你想要的。例如,如果你正在使用'Windows Forms','MessageBox.Show'。 – nvoigt 2013-05-01 14:46:36

+0

即時通訊使用在C#中編寫的WPF應用程序,使用MessageBox.show根本不帶任何東西。 – lparry1992 2013-05-02 11:06:13