Как использовать NULL в запросе Update?

Пытаюсь решить простую задачу - нужно в скрипте "обнулить" значение поля справочника. Поле не обязательное для заполнения, значение отличное от null в него записать удается, а вот как стереть из него все?

update = new Update(Page.UserConnection, "ConsignmentCargo")
        .Set("CurrentRoutePointId", Column.Parameter(DBNull.Value))
        .Where("IsLast").IsNotEqual(Column.Parameter(1))
        .And("ConsignmentId").IsEqual(Column.Parameter(CurrentConsignmentId));
update.Execute();

В примере это поле CurrentRoutePointId.

Через entity также установить null не удается

var entitySchemaManager = Page.Schema.SchemaManagerProvider.GetManager("EntitySchemaManager") as Terrasoft.Core.Entities.EntitySchemaManager;
        var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "ConsignmentCargo");
        entitySchemaQuery.AddColumn("CurrentRoutePoint");
        entitySchemaQuery.Filters.Add(entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Consignment", CurrentConsignmentId));
        entitySchemaQuery.Filters.Add(entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.NotEqual, "IsLast", 1));       
        var entities = entitySchemaQuery.GetEntityCollection(UserConnection);  
               
        foreach (var entity in entities) {
                entity.SetColumnValue("CurrentRoutePointId", Column.Parameter(Guid.Empty));
                entity.Save();
        }

Нравится

4 комментария

Александр, попробуйте так

Column.Parameter(null, "Guid")

Думаю, такие примеры тоже пригодятся

			var dbNull = DataTypeUtilities.ValueAsType<Guid>(DBNull.Value);
			Assert.AreEqual(Guid.Empty, dbNull);
 
			var dbNull = DataTypeUtilities.ValueAsType<Guid>(null);
			Assert.AreEqual(Guid.Empty, dbNull);
 
			var dbNull = DataTypeUtilities.ValueAsType<DateTime>(DBNull.Value);
			Assert.AreEqual(DateTime.MinValue, dbNull);
 
			var dbNull = DataTypeUtilities.ValueAsType<DateTime>(null);
			Assert.AreEqual(DateTime.MinValue, dbNull);

"Раловец Ольга" написал:

Александр, попробуйте так

Column.Parameter(null, "Guid")


Сработало, спасибо!

"Александр Кудряшов" написал:

.Where("IsLast").IsNotEqual(Column.Parameter(1))


Александр, такой код не переносим на Oracle. К сожалению, или к с частью :), mssql очень много "додумывает" за разработчика и неявно приводит типы данных. Но Oracle не сможет интерпретировать 1 как true. Поэтому лучше написать:

.Where("IsLast").IsNotEqual(Column.Parameter(true, "Boolean"))
Показать все комментарии