【问题标题】:How to restrict users from inputting duplicate values in a table?如何限制用户在表中输入重复值?
【发布时间】:2012-09-01 18:59:17
【问题描述】:

我有一个包含项目名称的表格。在 asp.net 中,我有一个文本框,用户可以在其中输入要添加到表中的新项目。我需要限制用户在表中输入重复的项目名称。当用户在表格中已经存在的文本框中输入文本(项目名称)并单击保存按钮时,我需要显示该项目已经存在的消息/验证。我该怎么做??

【问题讨论】:

    标签: c# asp.net sql sql-server-2008 tsql


    【解决方案1】:

    在“名称”列中将unique constraint 添加到您的表中。然后,当有人尝试添加重复名称时,SQL Server 将引发 execption。您必须处理客户端代码中的异常,向用户显示合理的消息。

    【讨论】:

      【解决方案2】:

      你没有写任何代码,所以:

      假设您使用的是 Ajax,一旦文本框的文本属性发生更改,您可以检查数据库中是否存在该项目。

      如果您使用的是普通的 asp.net,那么您可以尝试将项目添加到数据库并捕获异常。如果您的插入逻辑中存在异常并且它与重复键相关(错误号 2601),那么您会使文本框视觉对象无效。

      希望它有用。

      【讨论】:

        【解决方案3】:

        您可以执行以下查询:

        SELECT checking_col_name
        FROM your_table
        WHERE checking_col_name = your_textbox_value
        GROUP BY checking_col_name
        HAVING ( COUNT(checking_col_name) > 0 )
        

        如果上面的查询返回该行,那么您可以推断该值已经存在于给定表的列中,因此您可以在代码中相应地应用条件.....

        正如 Wiktor Zychla 所建议的,上述查询在处理多用户环境时可能会出现问题,我建议您检查Constraint.....您可以使用UNIQUE Constraint,以确保不会有重复的行(将只有唯一值)....如果执行查询以插入重复值,则会引发错误,您可以在代码中跟踪该错误并因此适用于您的条件......

        【讨论】:

        • 在您检查重复项和实际将记录插入数据库之间仍然只剩下几分之一秒。如果两个用户同时添加数据,使用您的方法他们仍然可能添加重复项。您应该在应用程序中锁定(这会降低性能并且无法在服务器场中工作)或对数据库进行检查约束(这是可靠的并且始终有效)。
        • 是的,最好检查唯一约束.....谢谢你提醒我这个问题......
        【解决方案4】:

        您可以在表的Name 列上使用unique constraint and unique index。 SQL Server 将在输入重复名称时引发异常。

        【讨论】:

        • 与几小时前的 Eriksson 的答案相同。
        猜你喜欢
        • 2012-05-03
        • 2020-12-03
        • 2021-12-27
        • 2012-04-25
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 2021-06-19
        • 1970-01-01
        相关资源
        最近更新 更多