sql >> Databasteknik >  >> RDS >> Sqlserver

Varför behandlar SqlParameter-namn/värdekonstruktorn 0 som null?

Som anges i dokumentationen för den konstruktören:

Du ringde helt enkelt en annan konstruktör än du trodde i ditt fall.

Anledningen till detta är att C# tillåter en implicit konvertering från heltalsliteralen 0 till enum-typer (som bara är integraltyper under), och denna implicita omvandling orsakar (string, SqlDbType) konstruktor för att vara en bättre matchning för överbelastningsupplösning än boxningskonverteringen som krävs för att konvertera int till object för (string, object) konstruktör.

Detta kommer aldrig att vara ett problem när du skickar en int variabel , även om värdet på den variabeln är 0 (eftersom det inte är en bokstavlig noll), eller något annat uttryck som har typen int . Det kommer inte heller att hända om du uttryckligen castar int till object som sett ovan, för då finns det bara en matchande överbelastning.



  1. Codeigniter simple_query vs. frågebyggare (infoga, uppdatera och ta bort)

  2. vad är flyktsekvensen för bindestreck (-) i PostgreSQL

  3. Välj det näst högsta lägsta värdet i Oracle

  4. vänskapsdatabasschema