sql >> Databáze >  >> RDS >> Sqlserver

Co SqlDbType mapuje na varBinary(max)?

SqlDbType.VarBinary s délkou -1 je ekvivalentem VARBINARY(MAX), alespoň teoreticky. Problém je ale trochu složitější, protože existuje také typ (nikoli hodnota enum), konkrétně SqlTypes.SqlBytes které lze použít. A existuje SqlTypes.SqlFileStream což lze použít také pro VARBINARY(MAX) typů, pokud mají FILESTREAM atribut.

Problém je ale v tom, že žádný z těchto výčtů nebo typů nepokrývá skutečný problém s prací s VARBINARY(MAX) sloupce v ADO.Net:spotřeba paměti. Všechny tyto typy, když se použijí „out-of-the-box“, vytvoří kopie hodnoty přidělené jako jediné pole v paměti, které je v nejlepším případě nevýkonné, ale jak se obsah zvětšuje, není možné jej použít, protože alokace selže. . Mám několik článků, které ukazují správný způsob, jak zacházet s VARBINARY(MAX) hodnoty v ADO.Net pomocí sémantiky streamování, která zabraňuje vytváření kopií celého obsahu v paměti:

  • Stahování a nahrávání obrázků ze serveru SQL pomocí ASP.Net MVC
  • FILESTREAM MVC:Stahování a nahrávání obrázků ze serveru SQL


  1. Přírůstková replikace dat v IRI Workbench

  2. Existuje způsob, jak vynutit, aby OracleCommand.BindByName byl ve výchozím nastavení pro ODP.NET pravdivý?

  3. Prevence sousedících/překrývajících se položek pomocí EXCLUDE v PostgreSQL

  4. Snímky databáze SQL Server -4