Domanda

Inserisco un nome nella casella di testo, ad es. & Quot; John " e salvarlo nel database che fa, quindi inserisco di nuovo " John " che non salva. Ma se entro " john " ;, lo salva di nuovo ... ne ho bisogno per non salvare john e viceversa.

ok quindi questa è la casella di testo che è abbastanza normale:

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

ed ecco il codice:

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();
            }
È stato utile?

Soluzione

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

potrebbe diventare

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

Altri suggerimenti

Un modo per farlo è di cambiarlo nel caso corretto prima di presentarlo al database.

Per ottenere il caso corretto, puoi provare il metodo ToTitleCase () in System.Globalization.TextInfo .

Nota che ToTitleCase () fornisce un comportamento di involucro arbitrario, non un comportamento linguisticamente corretto. Ad esempio "Guerra e pace" dovrebbe avere una minuscola a in inglese. Ciò è particolarmente problematico per casi come O'Brien, che ToTitleCase produrrà come O'brien.

Alla fine, potrebbe essere più semplice lasciare che il database salvi la cosa.

Tempo per una doccia fredda.

Per prima cosa, se si desidera verificare se il nome esiste e inserirlo in caso contrario, è necessario controllare sul server, sotto l'isolamento e il controllo delle transazioni appropriati. Quello che hai lì, oltre ad essere orrendamente inefficiente controllando il nome contro un array sul client , è errato perché controlla se il nome non esisteva (passato) . Non considera la concorrenza e, di conseguenza, due richieste possono tentare di inserire lo stesso nome.

In secondo luogo, se è necessaria l'univocità nel database, lo si impone mediante vincoli di tabella. Desideri un nome univoco senza distinzione tra maiuscole e minuscole, quindi aggiungi un vincolo UNIQUE alla tua tabella nella colonna Nome e assicurati che la colonna utilizzi una maiuscole / minuscole collation .

Perché non forzare solo in maiuscolo (o in minuscolo) nella logica di confronto:

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

HTH

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top