无法更新标识列'LocationID'

时间:2013-07-29 11:30:26

标签: c# .net sql

我正在尝试更新ID值。因此,如果ID为1,则新值为2,则应使用新值替换旧ID。

后端:

     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." );
        }
    }

前端:

      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 );

编辑我在SQL查询中添加了一个参数,但仍然没有更新

3 个答案:

答案 0 :(得分:6)

以下解决方法可能不是更可取,但至少从知识角度来看,这可能会对您有所帮助。

如果您想自己设置Identity列(LocationID)值而不是让Sql服务器执行,那么有一些解决方法。

set identity_insert Table_Name ON

然后删除您的行并使用其他标识重新插入。请注意,您仍然无法将同一行更新为新标识。这将允许insert语句指定Identity列值。

使用新的标识值完成插入后,请关闭identity_insert

set identity_insert Table_Name OFF

由于您是以编程方式进行更新,因此您可以拥有所有列的值,并且可能为除了您选择的标识值之外的所有列插入具有相同值的新行。

答案 1 :(得分:0)

LocationID是一个自动生成的ID。你应该改变数据库。你应该将身份设置为否。

答案 2 :(得分:0)

您必须检查SQL数据库中是否启用了Identity_insert,否则请在更新语句之前执行以下操作。

设置identity_insert YourTable ON。 然后删除你的行并用不同的身份重新插入。

完成插入操作后,请不要忘记关闭identity_insert

设置identity_insert YourTable OFF。