Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quel SqlDbType correspond à varBinary(max) ?

SqlDbType.VarBinary de longueur -1 est l'équivalent de VARBINARY(MAX), du moins en théorie. Mais le problème est un peu plus complexe, car il existe également un type (pas une valeur enum), à savoir SqlTypes.SqlBytes qui peut être utilisé. Et il y a SqlTypes.SqlFileStream qui peut également être utilisé pour VARBINARY(MAX) types, lorsqu'ils ont le FILESTREAM attribut.

Mais le problème est qu'aucune de ces énumérations ou types ne couvre le vrai problème de l'utilisation de VARBINARY(MAX) colonnes dans ADO.Net :consommation mémoire. Tous ces types, lorsqu'ils sont utilisés "prêts à l'emploi", créeront des copies de la valeur allouée en tant que tableau unique en mémoire, ce qui est au mieux peu performant, mais à mesure que le contenu devient plus volumineux, il devient carrément impossible à utiliser en raison des échecs d'allocation . J'ai quelques articles qui montrent la bonne façon de gérer VARBINARY(MAX) valeurs dans ADO.Net en utilisant une sémantique de diffusion qui évite la création de copies en mémoire de l'intégralité du contenu :

  • Télécharger et télécharger des images depuis SQL Server via ASP.Net MVC
  • FILESTREAM MVC :télécharger et télécharger des images à partir de SQL Server