如果区分大小写,则为主键冲突

时间:2009-09-07 10:59:06

标签: asp.net database primary-key

假设我有'dom'表,其中包含两个字段

  1. 名称
  2. 代码应该是主键。如果我输入值('SD','domnic') 如果我输入('SD','domnic1') 在asp.net中我写了验证,所以我可以收到警告信息。

    protected void ButtonSave_Click(object sender, EventArgs e)
    {
        try
        {
            if (Mode == "Add")
            {
                primarykeyValidation();-------------->validation
    
                if (strpkval == TextBoxWorkshopid.Text)
                {
                    Alert.Show("code Already Exists");
                    TextBoxWorkshopid.Text = string.Empty;
                    TextBoxWorkshopid.Focus();
                    return;
                }
            }
    ...
    
    public void primarykeyValidation()
    {
        DataSet dspkval = new DataSet();
        try
        {
            objaccess.Option = "P";
            objaccess.code= TextBoxWorkshopid.Text;
    
            dspkval = objaccess.retriveOutsideWorkshops();
    
            if (dspkval != null && dspkval.Tables.Count != 0 && dspkval.Tables[0].Rows.Count != 0)
            {
                strpkval = dspkval.Tables[0].Rows[0]["CODE"].ToString();
    
            }
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
    }
    

    如果我输入('sd','domnic'),它将不会显示由于违反主键而引发的错误消息。

    在“P”选项中,我将查询编写为

    select code from xxx where code=@code
    

    所以,如果我输入小case'sd'然后我sholud收到警告消息“代码aleady退出但它不会显示 消息........

1 个答案:

答案 0 :(得分:3)

1)配置数据库以区分大小写。被称为collation。但它确实会影响整个数据库。

2)您可以强制给定的查询具有特定的排序规则:http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my-sql-queries-case-sensitive.html

3)您可以修改业务逻辑,以便在首先将所有PK值发送到数据库之前将其设置为大写。你必须为更新/插入以及查询执行此操作,因此它可能会变得混乱(并且要小心您的查询仍然是sargable,即不要在查询中放置UPPER(@code) - 实际上修改之前的值将它放在参数中。