需要特定字段时更新记录的解决方案唯一

时间:2013-01-30 17:28:53

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

我有一张桌子

ProjectID
ProjectName
Project description

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

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

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

此代码可以正常使用。现在,当我想要更新项目描述字段时,再次检查项目名称并返回计数1(这是显而易见的)并且显示项目名称已经存在,我无法更新表的其他字段。

可以实现哪些其他逻辑来维护表中的唯一字段。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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

ALTER TABLE PROJECT ADD CONSTRAINT
            UX_PROJECT_NAME UNIQUE NONCLUSTERED
    (
                PROJECTNAME
    )

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

答案 1 :(得分:0)

当您希望特定字段是唯一的

时,实现记录更新的示例
 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";
            }