¿Cómo verificar la restricción uniq en la actualización/inserción en gridview?

Tengo una vista de cuadrícula simple y sqldatasource para vincular datos a la vista de cuadrícula, SqlDatabase. Estoy tratando de establecer en una columna una restricción única, por lo que si agrego una nueva fila o actualizo una fila y el valor ya existe, no se actualizará.

Para el Nombre de la columna, configuro -> Índices/claves -> nuevo -> Nombre de la columna elegida -> Clave única.

¿Cómo puedo obtener el error cuando dice que ya existe, en una etiqueta?

gracias

preguntado el 03 de mayo de 12 a las 21:05

1 Respuestas

Primero crea un procedimiento como este:

Create PROCEDURE [dbo].[test]
( 
@myUniquecolumn as varchar(20),
@ID    as int
)
AS
DECLARE @ReturnValue int
IF EXISTS (SELECT myUniquecolumn FROM mytable WHERE myUniquecolumn=@myUniquecolumn)
BEGIN
-- if the value already exist return 1
SELECT @ReturnValue = 1;
RETURN @ReturnValue;
END
ELSE
BEGIN
update mytable set myUniquecolumn=@myUniquecolumn where ID=@ID
SELECT @ReturnValue = 0;
RETURN @ReturnValue;
END

luego use este procedimiento en su sqldatasource para la actualización. Sigue esto tortuoso a cómo agregar un parámetro de salida a la fuente de datos sql.

después de su aspx sqldatasource debería ser similar a esto:

    <UpdateParameters>
        <asp:Parameter Name="myUniquecolumn" Type="String" />
        <asp:Parameter Name="ID" Type="Int32" />
        <asp:Parameter DbType="Int32" Direction="ReturnValue" Name="uniqtest" />
    </UpdateParameters>

luego escriba el siguiente código en su código detrás del archivo.

protected void SqlDataSource1_Updated(object sender, SqlDataSourceStatusEventArgs e)
{
    int uniquecolumn= (int)e.Command.Parameters["@uniqtest"].Value;

  if (uniquecolumn == 0)
    {
        Label1.Text = "Success";
    }
    else
    {
        Label1.Text = "fail";
    }
  }

Espero eso ayude.... :)

contestado el 03 de mayo de 12 a las 23:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.