PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Параметри и нулеви стойности на Npgsql 4.0

Новият API за общ параметър наистина има проблем - трябва да приема обикновен .NET null (а не DBNull.Value ), отворих този проблем за да проследите това, то ще бъде коригирано в 4.0.3.

Имайте предвид, че както бележката към документацията казва, че целият смисъл на общия API е да се избягва използването на Value свойство, което е от тип object . Ако използвате общия NpgsqlParameter<int> но задайте Value , вашият int ще бъде поставен в кутия, нарушавайки целта на API. Трябва да присвоявате на TypedValue , който е от тип int и няма да се боксира. Ето защо не можете да присвоите DBNull.Value за указване на нулева стойност (това е различен тип .NET).

Някои бележки относно това дали трябва да се използва този нов общ API:

  • Ако пишете много типове стойности (напр. int , DateTime ...) това ще премахне всички разпределения на боксове. Дали това ще бъде значително зависи от вашето приложение – профилирайте внимателно.
  • Общите API винаги трябва да се предпочитат пред негенеричните, когато типът е известен по време на компилиране. Това позволява на компилатора да проверява коректността на типа рано и прави кода ви по-ясен - използваме List<string> вместо ArrayList като въпрос на добро кодиране, дори когато производителността не е проблем
  • Основният (единствен?) недостатък на генеричния API е, че той е специфичен за Npgsql, което прави вашия код непреносим към други драйвери на бази данни (въпреки че има проблем за превръщането на това (или нещо подобно) в част от ADO.NET).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да превключите база данни с помощта на PostgreSQL

  2. Какъв е максималният размер на пакета JDBC?

  3. подзаявката в FROM трябва да има псевдоним

  4. PDO bindColumn и PDO::FETCH_BOUND -- задължителни или незадължителни?

  5. ГРЕШКА на Geoserver:функция postgis_lib_version()