Добавляю данные в бизнес-процессе через задание сценарий. Делаем многострочный Insert
var insCertificateData = new Insert(UserConnection).Into("NavCertificateData"); foreach (var entity in navCertificateData) { insCertificateData.Values() .Set("NavCertificate", Column.Parameter(certificateId)) .Set("NavProduct", Column.Parameter(entity.NavProduct )) .Set("NavDiametr", Column.Parameter(entity.NavDiametr)) .Set("NavMarka", Column.Parameter(entity.NavMarka,)) .Set("NavNippelAssembly", Column.Parameter(entity.NavNippelAssembly)) .Set("NavQuantity", Column.Parameter(entity.NavQuantity)) .Set("NavWeight", Column.Parameter(entity.NavWeight)) .Set("NavMinUES", Column.Parameter(entity.NavMinUES)) .Set("NavMaxUES", Column.Parameter(entity.NavMaxUES)) .Set("NavMinLength", Column.Parameter(entity.NavMinLength)) .Set("NavMaxLength", Column.Parameter(entity.NavMaxLength)) .Set("NavDK", Column.Parameter(entity.NavDK)) .Set("NavBend", Column.Parameter(entity.NavBend)) .Set("NavKTP", Column.Parameter(entity.NavKTP)) .Set("NavCompanyGrafit", Column.Parameter(entity.NavCompanyGrafit)); } insCertificateData.Execute();
В основном все типа string. В значении NavNippelAssembly иногда приходит EmptyString. И в этом случае получаем ошибку
"Для параметра \"P5\" со значением null необходимо указать тип данных"
Собственно есть Column.Parameter(Object,DataValueType). Полагаю, что надо его использовать, но как указать этот самый DataValuType? Тип строка
Нравится
Для установки null можно использовать Column.Const(null)
Николай Кузьмин,
Так у меня ж не всегда null и 5 полей, где может быть string.Empty
Алла, спасибо, я там как раз приводил похожий пример, только в нынешнем случае сравнение будет не с Guid.Empty, а с String.Empty.
.Set("IndustryId", ((IndustryIdParameter!=Guid.Empty)?Column.Parameter(IndustryIdParameter):Column.Const(null)))
Ну, или проверять условие и если не выполняется, не производить добавление к формируемому запросу этого Set, тогда в SQL-запросе вообще не будет упоминания этого пустого поля.
Мда, как всегда решение на поверхности лежало.
Александр, по мне правильней тогда делать сравнение не со string.Empty, а проверять stringIsNullOrEmpty(). А т.к. табличка у меня нуллы не поддерживает, то все пришло к такой конструкции
.Set("NavProduct", (string.IsNullOrEmpty(entity.NavProduct)? Column.Parameter(string.Empty) : Column.Parameter(entity.NavProduct)))
Алексей, если всё так, как описали, то зачем вообще два раза писать Column.Parameter и проверять на Empty? Можно только на null при помощи «??», как предложили тут:
.Set("NavProduct", Column.Parameter(entity.NavProduct ?? string.Empty))
Александр, учитывая источник данных, лучше проверять на Null и Empty. В любой момент Null может стать пустой строкой.
Так пустая строка в итоге и пишется, её же не надо на такую же заменять, можно сразу в параметр.