【问题标题】:Solution for updating a record when you require a particular field Unique当您需要特定字段时更新记录的解决方案 Unique
【发布时间】:2013-01-30 17:28:52
【问题描述】:

我有一张桌子

ProjectID
ProjectName
Project description

项目名称必须是唯一的。为了实现独特的逻辑,我将项目名称的名称发送到存储过程作为

Create proc CheckName
@Project Name
as
begin
select count(ProjectName)
where ProjectName=@Project Name

它将计数返回到 CS 页面,我将其检查为 如果(计数>0) { //添加 }

此代码适用于加法。现在,当我想更新项目描述字段时,再次检查项目名称并返回 Count 1(这很明显)并显示项目名称已存在,我无法更新表的其他字段。

可以实现哪些其他逻辑来维护表中的唯一字段。感谢您提供任何帮助。

【问题讨论】:

    标签: asp.net visual-studio-2010 sql-server-2008 c#-4.0


    【解决方案1】:

    为什么不在 ProjectName 列上添加一个唯一约束?将 ProjectID 设为主键,并在其上放置身份种子,使其自动递增。这也会自动将聚集索引添加到 ProjectID 列。此外,将数据库的排序规则设置为 LATIN1_GENERAL_CI_AI,以便数据库以不区分大小写的方式比较 ProjectName 列的值。如果需要区分大小写的比较,可以将排序规则设置为 LATIN1_GENERAL_CI_AS。要向 ProjectName 列添加唯一键约束,只需执行以下操作:

    ALTER TABLE PROJECT ADD CONSTRAINT
                UX_PROJECT_NAME UNIQUE NONCLUSTERED
        (
                    PROJECTNAME
        )
    

    现在您需要做的就是更新或插入,如果插入/更新重复的项目名称,则会抛出异常,您可以捕获并处理。

    【讨论】:

    • 谢谢先生,我刚刚从我的脑海中跳过了唯一约束。你让我从业务逻辑代码中的大量编码中解脱出来。
    【解决方案2】:

    当您希望特定字段唯一时实现记录更新的示例

     string connectionstring = WebConfigurationManager.ConnectionStrings[""].ConnectionString;
                SqlConnection con = new SqlConnection(connectionstring);
                SqlCommand cmd = new SqlCommand("InsertEmployee", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@Id", SqlDbType.Int, 4);
                cmd.Parameters["@Id"].Value = Convert.ToInt32(TextBox1.Text);
                cmd.Parameters.Add("@EmpName", SqlDbType.NVarChar, 50);
                cmd.Parameters["@EmpName"].Value = Convert.ToString(TextBox2.Text);
                cmd.Parameters.Add("@Salary", SqlDbType.Decimal);
                cmd.Parameters["@Salary"].Value = Convert.ToDouble(TextBox3.Text);
                try
                {
                    con.Open();
                    cmd.ExecuteScalar();
                    con.Close();
                }
                catch (Exception ex )
                {
                    if (ex.Message.Contains("UNIQUE KEY constraint"))
                    Lblmessage.Text = "Field already exist";
                }
    

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      相关资源
      最近更新 更多