#c# #.net #postgresql #function #null
#c# #.net #postgresql #функция #null
Вопрос:
Меня смущает решение о передаче параметра null целочисленному типу. Вот мой код в моем проекте .Net с angular. Спасибо за вашу помощь.
if(data.searchRange != "")
{
m_npgDB.SetParams("p_searchRange", int.Parse(data.searchRange));
}
else
{
m_npgDB.SetParams("p_searchRange", "");
}
Комментарии:
1. Разрешено ли просто пройти
null
? Если нет, то понимает ли это / разрешаетDBNull.Value
?2. Столбец в базе данных допускает значение null. У меня есть условие в функции postgrest , например (p_searchRange равен нулю или search_range = p_searchRange )
3. Целочисленный тип может быть null в C #, но вы не передаете null в предложении else, вы передаете пустую строку.
4. @jdoer1997 Целые числа являются типами значений, поэтому они не могут быть
null
…5. Хм, я пытаюсь изменить тип на числовой и использовать SetParamNumber как » «. И это сработало!
Ответ №1:
Вы просто создаете параметр
if (int.TryParse(data.searchRange, out var range))
{
m_npgDB.SetParams("p_searchRange", range);
}
else
{
m_npgDB.SetParams("p_searchRange", null);
}
Вы должны иметь возможность использовать целое число с нулевым значением
var value = int.TryParse(data.searchRange, out var range) ? range : default(int?);
m_npgDB.SetParams("p_searchRange", value);
Комментарии:
1. (К вашему сведению, явное приведение на
range
не требуется)2. Метод setParams принимает параметр 2 в виде строки, int, bool и т.д., Но не принимает значение nullable.
3. Вы можете изменить
SetParams
метод, чтобы принимать значение с нулевым значением int или сделать его универсальным. ADO.NET принимает различные типы параметров .NET для запросов sql.4. метод setPrams в библиотеке NpgDBManager из метаданных. Не удается изменить метод. Если вы передаете значение nullable в параметре. данные представляют собой символ, подобный строке «null». не нулевое значение.
5. Затем используйте какой-либо другой метод, который принимает
int?
или используйте Npgsql напрямую для создания команды с параметрами.