假设我有'dom'表,其中包含两个字段
代码应该是主键。如果我输入值('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退出但它不会显示 消息........
答案 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)
- 实际上修改之前的值将它放在参数中。