该文件只有14kb(14,000字节)。我已经读过varbinary(max)
列类型(我正在使用的)只支持8,000个字节。那是对的吗?如何将文件上传到数据库?
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;
}
}
错误:
字符串或二进制数据将被截断。声明一直如此 终止。
答案 0 :(得分:5)
在此过程中检查您要插入的其他列。我会特别检查ContentType
列,因为它类似于image/jpeg
,而不仅仅是图像或jpeg。
以下是list of possible content types,以便您可以相应地在ContentType列中创建足够的空间。
答案 1 :(得分:1)
varbinary [ ( n | max) ]
Variable-length binary data. n can be a value from 1 through 8,000.
max表示最大存储大小为2 ^ 31-1个字节。
http://msdn.microsoft.com/en-us/library/ms188362.aspx
这是2GB。
答案 2 :(得分:1)
如果您在表定义中将列定义为VARBINARY(MAX)
,那么您应该拥有最多2 GB的存储空间。如果您将最大列大小指定为数字,那么您只能明确要求最多VARBINARY(8000)
。
有关详细信息,请参阅this question
AFAIK VARBINARY(MAX)
仅出现在SQL Server 2008中,因此如果您的数据库在该版本之前进行了更新,则可能需要对其进行升级。
答案 3 :(得分:1)
我知道这不是你问题的答案,但是ms.GetBuffer()将得到底层缓冲区,这可能不是你数据的确切大小。 MemoryStream为写入分配了额外的空间,您可能正在从未使用的缓冲区中插入额外的字节。在这里你可以看到GetBuffer()返回一个256字节的数组,即使该文件只有5个字节长:
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
}
}