Pregunta

Ingreso un nombre en el cuadro de texto, por ejemplo. " John " y guardarlo en la base de datos que lo hace, luego vuelvo a ingresar "John" que no guarda Pero si ingreso "juan", lo guarda de nuevo ... Lo necesito para no guardar el juan y viceversa.

ok, entonces este es el cuadro de texto que es silencioso normal:

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

y aquí está el 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();
            }
¿Fue útil?

Solución

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

podría convertirse

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

Otros consejos

Una forma de hacerlo es cambiarlo al caso apropiado cada vez antes de presentarlo en la base de datos.

Para llevarlo al caso correcto, puede probar el método ToTitleCase () en System.Globalization.TextInfo .

Tenga en cuenta que ToTitleCase () proporciona un comportamiento de carcasa arbitrario, no un comportamiento lingüísticamente correcto. Por ejemplo "Guerra y paz" debe tener una minúscula a en inglés. Esto es especialmente problemático para casos como O'Brien, que ToTitleCase se mostrará como O'brien.

Al final, podría ser más fácil dejar que la base de datos guarde la cosa.

Tiempo para una ducha fría.

Primero, si desea verificar si el nombre existe e insertarlo si no es así, debe verificar en el servidor, bajo un aislamiento y control de transacciones adecuados. Lo que tiene allí, además de ser terriblemente ineficiente al verificar el nombre frente a una matriz en el cliente , es incorrecto porque verifica si el nombre no existía (tiempo pasado) . No considera la concurrencia y, como resultado, dos solicitudes pueden intentar insertar el mismo nombre.

Segundo, si necesita unicidad en la base de datos, entonces la aplicará mediante restricciones de tabla. Si desea un nombre único que no distinga entre mayúsculas y minúsculas, debe agregar una restricción ÚNICA a su tabla en la columna Nombre y asegúrese de que la columna utilice una intercalación relé .

¿Por qué no simplemente forzar a mayúsculas (o minúsculas para el caso) en la lógica de comparación:

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

HTH

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top