我想要存储在数据库中的小型用户配置图像(5kB)。但我不确定数据类型。 VARBINARY(6000)? og可能是二进制(6000)?也许用(MAX)?
我如何编写和阅读图像?我可以简单地使用INSERT和数组中的bytearray吗?
答案 0 :(得分:3)
您也可以使用varbinary(max)
。如果知道的大小要小得多,那么可以有时可以限制它 - 这可以实现行内数据优化;然而,对于一个5k的图像,这不会有用;因此,(max)
类型将更加方便。
是的,您可以使用常规insert
,select
和byte[]
来表示这种大小。 是一个“循环追加”/“循环读取”方法,你可以用于巨大的文件(多兆字节或千兆字节),但你不要我需要这个。
答案 1 :(得分:2)
您可以使用blob
(二进制大对象)在您的数据库中存储图像,请参阅:msdn
正如Marc Gravell所说:BLOB是一个通用术语,指的是text,ntext和image数据类型,通常包含文档和图片。
编辑:
" text,ntext和image数据类型":多年来它们都已经过时了; " varchar(max),nvarchar(max)和varbinary(max)数据类型"将是非常可取的
例如:
byte[] image = GetImage(photoFilePath);
using (SqlConnection connection = new SqlConnection(connectionString)){
SqlCommand command = new SqlCommand("INSERT INTO Employees (Image) " +
"Values(@Image)", connection);
command.Parameters.Add("@Image", SqlDbType.VarBinary, image.Length).Value = image;
connection.Open();
command.ExecuteNonQuery();
}
GetImage()
方法:
public static byte[] GetImage(string filePath)
{
FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(stream);
byte[] image = reader.ReadBytes((int)stream.Length);
reader.Close();
stream.Close();
return image;
}
答案 2 :(得分:1)
您可以使用数据类型image
(http://msdn.microsoft.com/en-us/library/ms187993.aspx)
是的,您只需使用insert
添加二进制数据即可。
有样本:
insert into binary_file (binary_file_id, binary_data, file_name)
values (@binary_file_id, @binary_data, @file_name)
,
其中@binary_data
是字节数组