Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Welcher SqlDbType wird varBinary(max) zugeordnet?

SqlDbType.VarBinary mit der Länge -1 ist zumindest theoretisch das Äquivalent von VARBINARY(MAX). Aber das Problem ist etwas komplexer, da es auch einen Typ gibt (keinen Enum-Wert), nämlich SqlTypes.SqlBytes die verwendet werden können. Und es gibt SqlTypes.SqlFileStream was auch für VARBINARY(MAX) verwendet werden kann Typen, wenn sie den FILESTREAM haben Attribut.

Aber das Problem ist, dass keine dieser Aufzählungen oder Typen das eigentliche Problem bei der Arbeit mit VARBINARY(MAX) abdeckt Spalten in ADO.Net:Speicherverbrauch. Alle diese Typen erstellen, wenn sie „out-of-the-box“ verwendet werden, Kopien des Werts, der als einzelnes Array im Speicher zugewiesen wird, was bestenfalls leistungsschwach ist, aber mit zunehmendem Inhalt aufgrund von Zuordnungsfehlern absolut unmöglich wird, ihn zu verwenden . Ich habe ein paar Artikel, die den richtigen Umgang mit VARBINARY(MAX) zeigen Werte in ADO.Net mithilfe von Streaming-Semantik, die die Erstellung von In-Memory-Kopien des gesamten Inhalts vermeidet:

  • Bilder von SQL Server über ASP.Net MVC herunterladen und hochladen
  • FILESTREAM MVC:Bilder von SQL Server herunterladen und hochladen