2009-09-07 55 views
-1

想我也该“DOM”表,该表包含两个字段主键冲突是否区分大小写

  1. 代码

代码应该是主键。在情况下,如果我输入值(“SD”,“domnic”) 那样,如果我在asp.net输入(“SD”,“domnic1”) 我已经写了验证,所以我可以接收警报消息。

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 [email protected] 

所以,如果我进入小case'sd”然后我sholud接收警报消息“的代码已位于退出,但它wouldnt显示 消息。 .......

回答

3

1)配置你的数据库大小写被誉为collation它会影响整个数据库,但

2)您可以强制给定的查询有特定的排序。: http://sqlserver2000.databases.aspfaq.com/how-can-i-make-my-sql-queries-case-sensitive.html

3)使所有的PK值都在第一时间被发送到数据库之前进行大写您可以修改的业务逻辑。你必须进行更新,做到这一点/刀片以及查询的,所以它可能会导致混乱(和小心你的查询仍然sargable即不要把UPPER(@code)在查询 -之前实际修改值推杆它在参数中)。