2016-03-17 2 views
0

AS часть импорта, которую я пишу Я использую параметризованные значения, однако база данных, которую я экспортирую, не может обрабатывать значения NULL, поэтому мне нужно найти способ обработки значений NULL ,Обработка нулевых значений в GetSQLDateTime и GetSQLMoney

Ближайший я получил это:

if (tenantexportReader.GetSqlMoney(8).ToDecimal().Equals(null)) 
{ 
    tenantimportCommand.Parameters["PRICEFINAL"].Value = "0.00"; 
} 
else 
{ 
    tenantimportCommand.Parameters["PRICEFINAL"].Value = tenantexportReader.GetSqlMoney(8).ToDecimal(); 
} 

и Похожая вещь с SqlDateTime

if (tenantexportReader.GetDateTime(9).ToShortDateString().Equals(null)) 
{ 
    tenantimportCommand.Parameters["TENSDATE"].Value = "0.00"; 
} 
else 
{ 
    tenantimportCommand.Parameters["TENSDATE"].Value = tenantexportReader.GetDateTime(9).ToShortDateString(); 
} 

Однако это не появляется на работе, а я получаю следующее:

Сообщение = Данные являются нулевыми. Этот метод или свойство не может быть вызван значениями Null.

ответ

0

Вместо

if (tenantexportReader.GetSqlMoney(8).ToDecimal().Equals(null)) 

вы, вероятно, следует использовать

if (tenantexportReader.IsDbNull(8)) 

Поскольку значение в базе данных NULL (который находится в C# DbNull.Value), я полагаю, что GetSqlMoney и GetSqlDateTime бросить исключение, которое вы получили. DbNull.Value не могут быть преобразованы в SqlMoney или DateTime.
Проверьте, имеет ли значение значение null через IsDbNull перед вызовом GetSqlMoney или GetSqlDateTime.


Так что ваше окончательные if заявление должно выглядеть примерно так:

if (tenantexportReader.IsDbNull(8)) 
{ 
    tenantimportCommand.Parameters["PRICEASK"].Value = "0.00"; 
} 
else 
{ 
    tenantimportCommand.Parameters["PRICEFINAL"].Value = tenantexportReader.GetSqlMoney(8).ToDecimal(); 
} 
+0

Это, похоже, решило эту проблему, однако вместо этого вместо этого возникла ошибка несоответствия типа данных. –

+0

@ JoshuaCameron-Mackintosh просто понял, что вы используете два разных имени параметра здесь: 'PRICEASK' и' PRICEFINAL'. Это верно? Не может помочь вам с ошибкой несоответствия типа данных, тем более, что я не знаю, где это происходит. Вы можете открыть для него новый вопрос и включить трассировку кода и стека. –

+0

Это было случайно, параметры были исправлены в программе, но та же ошибка. –

0

Почему бы присвоить строку в денежное выражение ???

Возможно, что вы хотели бы сделать это так:

var priceFinal = tenantexportReader.GetSqlMoney(8); 

tenantimportCommand.Parameters["PRICEFINAL"].Value = (decimal)(priceFinal.IsNull ? 0 : priceFinal); 

Я действительно не понимаю, почему вы установите его в «0,00» (строка), когда она равна нулю и десятичное значение, когда его не является нулевым.

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