Le file est seulement 14kb (14 000 octets). J'ai lu que le type de colonne varbinary(max)
(que j'utilise) ne supporte que 8 000 octets. Est-ce exact? Comment puis-je download mon file dans la database?
if (file.ContentLength < (3 * 1048576)) { // extract only the fielname var fileName = Path.GetFileName(file.FileName); using (MemoryStream ms = new MemoryStream()) { file.InputStream.CopyTo(ms); byte[] array = ms.GetBuffer(); adj.resumeFile = array; adj.resumeFileContentType = file.ContentType; } }
L'erreur:
Chaîne ou des données binarys seront tronquées. La déclaration a été résiliée.
Vérifiez vos autres colonnes que vous insérez dans pendant ce process. Je voudrais surtout vérifier la colonne ContentType
car ce sera quelque chose comme image/jpeg
et pas simplement image ou jpeg.
Voici une list des types de contenu possibles afin que vous puissiez créer suffisamment d'espace dans votre colonne ContentType en conséquence.
varbinary [ ( n | max) ] Variable-length binary data. n can be a value from 1 through 8,000.
max indique que la taille de stockage maximale est de 2 ^ 31-1 octets.
http://msdn.microsoft.com/en-us/library/ms188362.aspx
Donc c'est 2GB.
Si vous avez défini votre colonne comme VARBINARY(MAX)
dans la définition de table, vous devriez avoir jusqu'à 2 Go d'espace de stockage. Si vous avez spécifié la taille maximale de la colonne sous la forme d'un nombre, vous pouvez uniquement requestr explicitement jusqu'à VARBINARY(8000)
.
Voir cette question pour plus de détails
AFAIK VARBINARY(MAX)
n'apparaît que dans SQL Server 2008, donc si votre database est antérieure à cette version, vous devrez peut-être la mettre à niveau.
Je sais que ce n'est pas la réponse à votre question, mais ms.GetBuffer () obtiendra le tampon sous-jacent qui n'est probablement pas la taille exacte de vos données. Le MemoryStream alloue une place supplémentaire pour l'écriture et vous insérez probablement des octets supplémentaires à partir du tampon inutilisé. Ici vous pouvez voir que GetBuffer () returnne un tableau de 256 octets même si le file n'a que 5 octets:
using (MemoryStream ms = new MemoryStream()) { using (FileStream fs = File.OpenRead("C:\\t\\hello.txt")) { fs.CopyTo(ms); byte[] results = ms.GetBuffer(); Console.WriteLine("Size: {0}", results.Length); // 256 byte[] justdata = new byte[ms.Length]; Array.Copy(results, justdata, ms.Length); Console.WriteLine("Size: {0}", justdata.Length); // 5 } }