【问题标题】:primary key violation if case sensitive如果区分大小写,则违反主键
【发布时间】:2009-09-07 10:59:05
【问题描述】:

假设我有一个包含两个字段的“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

所以如果我输入 small case'sd' 那么我应该收到警告消息“代码 aleady 退出但它不会显示 留言…………

【问题讨论】:

    标签: asp.net database primary-key


    【解决方案1】:

    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) - 实际上修改值放入参数之前)。

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 2021-04-26
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多