【问题标题】:C# Database Interface Checking SQL DuplicatesC# 数据库接口检查 SQL 重复
【发布时间】:2013-04-25 12:17:21
【问题描述】:

好的,我正在为能够向系统添加新车的汽车经销商建立一个库存系统,现在我需要添加一个功能,如果经销商输入的汽车 REG 已经在它会带来的数据库中出现错误消息框。

我该怎么做?

代码如下:

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);
            }



        }

【问题讨论】:

  • 您应该在该字段上创建一个UNIQUE CONSTRAINT(假设您使用的是 MS SQL Server)
  • 在数据库中的该字段上创建唯一约束。会抛出异常。
  • 注册号是主键,这将是唯一的,当您输入重复项时,它会在控制台中打印出现 sql 错误,因此确实会看到重复项。但我希望以消息框的形式出现错误

标签: c# sql exception duplicates


【解决方案1】:

我建议您首先确保数据库中没有两个相同的汽车注册。

我假设,汽车注册是您场景中的唯一键。您可以在表上创建 unique key 约束。由于这可能是您在表格中的定义列,您应该在您的汽车注册列上创建一个所谓的primary key

ALTER TABLE stockList
ADD CONSTRAINT PK_stockList_CarRegistration PRIMARY KEY (CarRegistration)

现在,如果你第二次插入相同的键,数据库会抛出异常。

您需要捕获此异常并很好地告诉用户他做错了什么。

如果您想要一个舒适的用户界面,您可能希望从数据库中加载所有现有的汽车注册信息,并在用户输入所有其他字段之前告诉他该信息已经存在。

【讨论】:

  • 这就是我试图做的,在控制台输出上它说找到了一个重复项。我怎样才能让它显示在我正在做的应用程序上
  • Console.WriteLine 是您自己的代码,您可以将其更改为任何您想要的。 MessageBox.Show 例如,如果您使用的是 Windows Forms
  • 嗯,我使用的是用 C# 编写的 WPF 应用程序,使用 MessageBox.show 根本不会带来任何东西。
  • 如果您没有看到MessageBox,但您确实看到了Console.WriteLine,那么这不是数据库或唯一约束的问题。您可能想针对您的 MessageBox 问题提出一个单独的问题。
  • 我也没有看到控制台输出,我得到的只是一个 SQL 错误,指出已找到重复条目
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
相关资源
最近更新 更多