sql >> Databasteknik >  >> RDS >> PostgreSQL

Npgsql 4.0-parametrar och nollvärden

Den nya generiska parametern API har verkligen ett problem - den borde acceptera vanlig .NET null (och inte DBNull.Value ), jag har öppnat det här problemet för att spåra detta kommer det att fixas i 4.0.3.

Observera att som dokumentationsnoteringen säger, hela poängen med det generiska API:et är att undvika att använda Value egenskap, som är av typen object . Om du använder den generiska NpgsqlParameter<int> men tilldela Value , kommer din int att vara boxad, vilket motverkar syftet med API. Du bör tilldela TypedValue , som är av typen int och kommer inte att boxas. Det är också därför du inte kan tilldela DBNull.Value för att ange ett nollvärde (det är en annan .NET-typ).

Några anmärkningar om huruvida detta nya generiska API bör användas:

  • Om du skriver många värdetyper (t.ex. int , DateTime ...) detta tar bort alla boxningstilldelningar. Huruvida detta kommer att ha betydelse beror på din ansökan – profilera noggrant.
  • Generiska API:er i allmänhet bör alltid föredras framför icke-generiska när typen är känd vid kompilering. Detta gör att kompilatorn kan kontrollera typkorrektheten tidigt och gör din kod tydligare - vi använder List<string> snarare än ArrayList som en fråga om bra kodning även när prestanda inte är ett problem
  • Den största (enda?) nackdelen med det generiska API:t är att det är Npgsql-specifikt, vilket gör din kod icke-portabel till andra databasdrivrutiner (även om ett problem finns för att göra detta (eller något liknande) till en del av ADO.NET).


  1. SQLite IN

  2. SQL Server Failover Cluster Installation -2

  3. Hur du anpassar dina MySQL- och MariaDB-säkerhetskopier med ClusterControl

  4. MySQL multidimensionell? Dynamisk pivot