Pergunta

I insira um nome na caixa de texto, por exemplo. "John" e salvá-lo no banco de dados que ele faz, então eu entrar novamente "John", que ele não salva. Mas se eu digitar "John", ele salva este novo ... eu preciso dele para não salvar o john e vice-versa.

ok assim que esta é a caixa de texto que é calma normal:

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

e aqui está o código:

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();
            }
Foi útil?

Solução

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

poderia se tornar

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

Outras dicas

Uma maneira de fazer isso é para alterá-lo para caso apropriado cada vez antes de apresentá-lo ao banco de dados.

Para obtê-lo para caso adequado, você pode tentar o método ToTitleCase() em System.Globalization.TextInfo.

Note que ToTitleCase() fornece um comportamento caixa arbitrária, não um comportamento linguisticamente correto. Por exemplo, "Guerra e Paz" deve ter uma minúscula um em Inglês. Isto é especialmente problemático para casos como O'Brien, que de saída ToTitleCase vontade como O'brien.

No final, pode ser mais fácil apenas para deixar o banco de dados salvar a coisa.

O tempo para uma ducha fria.

Em primeiro lugar, se você quiser verificar se o nome existe e inseri-lo se não você deve verificar no servidor, sob isolamento adequado e controle de transação. O que você tem lá, além de ser terrivelmente ineficiente, verificando o nome vs. um array no cliente , é incorreta porque ele verifica se o nome não fez existiu (passado) . Não considera a concorrência e, como resultado dois pedidos podem tentar inserir o mesmo nome.

Em segundo lugar, se você precisar de singularidade no banco de dados, então você aplicá-la por restrições de tabela. Você quer um caso único nome insensível, então você deve adicionar um UNIQUE restrição à sua mesa na coluna Nome e certifique-se a coluna usa um caso insensível agrupamento .

Por que não apenas forçar para maiúsculas (ou inferior caso para que o assunto) na lógica de comparação:

if (Name.ToUpper ()! = (String) nomes [i] .ToUpper)

HTH

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top