3 votes

Impossible de mettre à jour la colonne d'identité 'LocationID'

J'essaie de mettre à jour une valeur d'identification. Ainsi, si l'ID est 1 et que la nouvelle valeur est 2, l'ancien ID doit être remplacé par le nouveau.

Le dos de l'appareil :

     public static void UpdateLocation( int locationID, SqlConnection connection,                SqlTransaction transaction )
    {
        StringBuilder sqlString = new StringBuilder();
        SqlCommand command;

        sqlString.Append( "UPDATE [Location] SET " );
        sqlString.Append( "description = @description " );
        sqlString.Append( "WHERE locationID = @locationID " );
        command = new SqlCommand( sqlString.ToString(), connection );
        if( ( transaction != null ) ) command.Transaction = transaction;

        command.Parameters.Add( "@locationID", SqlDbType.Int ).Value = locationID;
       command.Parameters.Add( "@description", SqlDbType.VarChar ).Value = description;
        int rowsAffected = command.ExecuteNonQuery();

        if( !( rowsAffected == 1 ) )
        {
            throw new Exception( "An error has occurred while updating UpdateMedicationDispenseStatus." );
        }
    }

Côté avant :

      private void btnFromLocation_Click( object sender, System.Windows.RoutedEventArgs e )
     {
         if( !( ( Locations )cmbLocationDescriptionList.SelectedItem == ( Locations )cmbDescriptionListTo.SelectedItem ) )
         {

             for( int i = 0; i < lstMedicationForCurrentLocation.SelectedItems.Count; i++ )
    {
                 location = (Locations)cmbDescriptionListTo.SelectedItem;
        LocationData.UpdateLocation( location.LocationID );

EDITAR J'ai ajouté un paramètre à la requête SQL, mais la mise à jour ne se fait toujours pas.

6voto

R.C Points 9982

La solution ci-dessous n'est peut-être pas préférable, mais elle peut au moins vous être utile du point de vue de la connaissance.

Il existe des solutions de contournement si vous souhaitez définir vous-même la valeur de la colonne Identité (LocationID) plutôt que de laisser faire le serveur Sql.

set identity_insert Table_Name ON

Supprimez ensuite votre ligne et réinsérez-la avec une identité différente. Veuillez noter que vous ne pouvez toujours pas mettre à jour la même ligne avec une nouvelle identité. Cela permettra aux instructions d'insertion de spécifier les valeurs des colonnes d'identité.

Une fois que vous avez effectué l'insertion avec la nouvelle valeur d'identité, tournez le bouton identity_insert éteint

set identity_insert Table_Name OFF

Puisque vous effectuez des mises à jour par programme, vous pouvez avoir les valeurs de toutes les colonnes et probablement insérer une nouvelle ligne avec les mêmes valeurs pour toutes les colonnes, à l'exception de la valeur d'identité qui sera de votre choix.

0voto

Ron Deijkers Points 297

LocationID est alors un identifiant généré automatiquement. Vous devez le modifier dans la base de données. Vous devez définir l'identité sur non.

0voto

adityaswami89 Points 551

Vous devez vérifier si Identity_insert est activé dans votre base de données SQL, sinon faites-le comme ci-dessous avant votre déclaration de mise à jour.

set identity_insert YourTable ON . Supprimez ensuite votre ligne et réinsérez-la avec une identité différente.

Une fois l'insertion effectuée, n'oubliez pas de désactiver identity_insert.

set identity_insert YourTable OFF.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X