.NET, вставляющий Нулевые значения в базу данных SQL Server от значений переменных

Я не уверен, что это лучший подход, но в аналогичной задаче я использовал промежуточную сущность, чтобы зафиксировать изменение состояния. В вашем случае это будет что-то вроде

streamsBuilder.stream("my-topic").groupByKey()
          .aggregate(DeviceState::new, new Aggregator<String, Device, DeviceState>() {
        public DeviceState apply(String key, Device newValue, DeviceState state) {
            if(!newValue.getStatusBit().equals(state.getStatusBit())){
                 state.setChanged(true);    
            }
            state.setStatusBit(newValue.getStatusBit());
            state.setDeviceId(newValue.getDeviceId());
            state.setKey(key);
            return state;
        }
    }, TimeWindows.of(…) …).filter((s, t) -> (t.changed())).toStream();

В полученной теме у вас будут изменения. Вы также можете добавить некоторые атрибуты в DeviceState, чтобы сначала инициализировать его, в зависимости от того, хотите ли вы отправить событие, когда поступит первая запись устройства и т. Д.

6
задан uriDium 6 March 2009 в 16:08
поделиться

6 ответов

Еще лучше, чем троичное двойной вопросительный знак (??) оператор. Берет первое ненулевое значение. Так:

string x = null;
command.Parameters.AddParameter(
     new SqlParameter("@column", (object)x ?? DBNull.Value);

дал бы Вам parm со значением DBNull. Значение, но

string x = "A String";
command.Parameters.AddParameter(
     new SqlParameter("@column", (object)x ?? DBNull.Value);

Дал бы Вам parm со "Строкой" как значение.

11
ответ дан 8 December 2019 в 17:27
поделиться

То, что я иногда делаю, является этим:

command.Parameters.Add ("@column", SqlDbType.VarChar).Value = DBNull.Value;

if( String.IsNullOrEmpty (theString) == false )
{
    command.Parameters["@column"].Value = theString;
}
0
ответ дан 8 December 2019 в 17:27
поделиться

Возможно, тернарный оператор - что-то, что Вы находите полезными.

0
ответ дан 8 December 2019 в 17:27
поделиться

Nullable<T> не может относиться String так как это - ссылочный тип и не тип значения.

0
ответ дан 8 December 2019 в 17:27
поделиться

Nullable работает отлично для примитивов. Я оказываюсь перед необходимостью тестировать поведение строки, но одна опция, по крайней мере, очистить Ваш код состояла бы в том, чтобы определить дополнительный метод строки.

Можно ли использовать?? оператор для строк:

команда. Параметры. AddParameter (новый SqlParameter (" @column", myNull?? (объектный) DBNull. Значение);

?? возвращает первый объект, если это не является пустым, другое мудрое, это возвращает второй объект.

Править

Зафиксированный код выше, таким образом, это скомпилирует Вас, должен бросить DBNull. Оцените объекту.

3
ответ дан 8 December 2019 в 17:27
поделиться

Я соглашаюсь, что это неуклюже и немного неудачно тот SqlParameter. Значение должно быть установлено к DbNull. Значение. Но нет никакого пути вокруг этого так, необходимо жить с тестированием на пустой указатель.

0
ответ дан 8 December 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: