如何读取和写入PNG文件到我的数据库?

时间:2014-11-25 10:21:44

标签: c# sql-server

我想要存储在数据库中的小型用户配置图像(5kB)。但我不确定数据类型。 VARBINARY(6000)? og可能是二进制(6000)?也许用(MAX)?

我如何编写和阅读图像?我可以简单地使用INSERT和数组中的bytearray吗?

3 个答案:

答案 0 :(得分:3)

您也可以使用varbinary(max)。如果知道的大小要小得多,那么可以有时可以限制它 - 这可以实现行内数据优化;然而,对于一个5k的图像,这不会有用;因此,(max)类型将更加方便。

是的,您可以使用常规insertselectbyte[]来表示这种大小。 是一个“循环追加”/“循环读取”方法,你可以用于巨大的文件(多兆字节或千兆字节),但你不要我需要这个。

答案 1 :(得分:2)

您可以使用blob(二进制大对象)在您的数据库中存储图像,请参阅:msdn

  

BLOB是一个通用术语,指的是text,ntext和image数据类型,通常包含文档和图片。

正如Marc Gravell所说:

编辑

  

" 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;
}

source

答案 2 :(得分:1)

您可以使用数据类型imagehttp://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是字节数组