文本框或代码不区分大小写

时间:2009-11-26 00:08:03

标签: c# asp.net sql-server textbox

我在文本框中输入名称,例如。 “John”并将其保存在数据库中,然后我再次输入“John”,它不会保存。但是,如果我输入“john”,它会再次保存...我需要它不能保存约翰,反之亦然。

好的,所以这是正常的文本框:

 <asp:TextBox ID="TextBox2" runat="server" Width="80%" BorderColor="Black" 
                    MaxLength="127"></asp:TextBox>

这是代码:

int k= 0
SqlConnection dataConnection = new SqlConnection();
            dataConnection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlCommand dataCommand =
                    new SqlCommand("select Name from Groups", dataConnection);


            ArrayList names = new ArrayList();
            dataConnection.Open();
            SqlDataReader rdr = dataCommand.ExecuteReader();
            while (rdr.Read())
            {
                names.Add(rdr.GetString(0));
            }
            dataCommand.Dispose();
            dataConnection.Dispose();

            //to check if name already used..
            for (int i = 0; i < names.count; i++)
            {
                if (Name != (string)names[i])
                {
                    k = 1;

                }
                else
                {
                    Label1.Text = "Name is already present";
                    Label1.Visible = true;
                    k = 0;
                    break;
                }
            }
            if (k == 1)
            {
                Insertname();
            }

4 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是每次将其更改为正确的大小写,然后再将其呈现给数据库。

为了使其正常,您可以尝试ToTitleCase()中的System.Globalization.TextInfo方法。

请注意ToTitleCase()提供任意的套管行为,而不是语言上正确的行为。例如,“战争与和平”应该用英文小写a。对于像O'Brien这样的案件尤其有问题,ToTitleCase将输出为O'brien。

最后,让数据库保存东西可能更容易。

答案 1 :(得分:1)

if (Name != (string)names[i])
{
    ...
}

可能会成为

if (!Name.Equals((string)names[i], StringComparison.InvariantCultureIgnoreCase))
{
    ...
}

答案 2 :(得分:1)

冷水澡的时间。

首先,如果要检查名称是否存在,如果不存在则插入名称,则必须在适当的隔离和事务控制下检查服务器。你在那里有什么,除了通过检查客户端上的名称与数组相比非常低效,是不正确的,因为它检查名称是否不存在(过去时) 。它不考虑并发性,因此两个请求可以尝试插入相同的名称。

其次,如果您需要数据库中的唯一性,那么您可以通过表约束来强制执行它。您需要不区分大小写的唯一名称,然后应在“名称”列上向表中添加UNIQUE constraint,并确保该列使用不区分大小写的collation

答案 3 :(得分:0)

为什么不在比较逻辑中强制大写(或小写):

if(Name.ToUpper()!=(string)names [i] .ToUpper)

HTH