0

我正在使用 ASP.NET C# 将记录插入 MySql 数据库。我有一个看起来与此类似的方法:

public bool InsertRecord()
{
    string message;
    try
    {
        //Insert and Save
        return true;
    }
    catch(Exception ex)
    {

         if(ex.InnerException != null)
         {
             message = ex.InnerException is MySqlException
             ? MySqlErrors.GetMySqlErrorMessage(((MySqlException)ex.InnerException).Number)
             : ex.InnerException.Message;
         }
         else
         {
              message = ex.Message;
         }

         return false;
     }
 }

目前,如果它被捕获,则Message属性Exception为:

"Duplicate entry 'xxxxx-bbbbb' for key 'index_1"

这对用户来说很神秘,所以我很好奇是否有办法获取有关哪些字段导致重复异常的特定信息,例如,"Field B already exists in the in table".或者"Field A and B" already exist in the table".

如果很容易获得特定领域,我想到了另外两个选项,并希望对它们发表意见。他们是:

  1. 我知道哪些字段会导致重复错误,所以我认为可以更具体的一种方法是检查数据库中是否已经存在带有字段的记录,如果存在,请将其报告给用户。这样,我避免了异常,但它需要额外的数据库调用。

  2. 我认为的另一种方法是为特定异常设置另一个类,我可以存储作为键或唯一字段的字段,例如,如果用户尝试更新汽车表并且 VIN 是唯一的,我可以简单地捕获例外,但由于我知道他们要更新的表,我可以说: "A record with VIN "abc" already exists".

4

1 回答 1

0

在留言中

“键 'index_1' 的重复条目 'xxxxx-bbbbb'”

  • index_1是即将被违反的约束的名称
  • xxxxx-bbbbb是将被插入的重复值。

通过解析表定义(例如。SHOW CREATE TABLE the_table),您可以推断出涉及哪些字段。

[编辑]

通过查询information_schema数据库来检索所涉及的列可能更容易:

SELECT column_name
FROM information_schema.key_column_usage
WHERE constraint_schema = DATABASE()
AND table_name = '<your table name>'
AND constraint_name = '<constraint name>';
于 2013-08-30T14:28:11.677 回答