日期:2014-05-17  浏览次数:20907 次

请问一个数据库存图片的问题
private void button1_Click(object sender, EventArgs e)
  {
  openFileDialog1.Filter = "*jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP";
  if(openFileDialog1.ShowDialog()==DialogResult.OK)
  {  
  string fullpath =openFileDialog1.FileName;//文件路径
  FileStream fs = new FileStream(fullpath, FileMode.Open);
  byte[] imagebytes =new byte[fs.Length];
  BinaryReader br = new BinaryReader(fs);
  imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));
  SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=;database=db_05");
  con.Open();
  SqlCommand com = new SqlCommand("insert into tb_08 values(@ImageList)",con);
  com.Parameters.Add("ImageList", SqlDbType.Image);
  com.Parameters["ImageList"].Value = imagebytes;
  com.ExecuteNonQuery();
  con.Close();
  }  
  } 

我主要问一下,

1:红色部分,sql中参数的数据类型是SqlDbType.Image类型,而设置Value值的时候,却是byte[]字节数组,这怎么说得通呢?数据类型都不一样
2:如果把一个1M大小的图片,压缩成二进制,存进数据库,该数据所占的空间有多大呢?是不是也是1M?


------解决方案--------------------
SqlDbType.Image本身就是二进制的,类型一样的,数据库中一般不用image了,用varbinary(max)就好了


------解决方案--------------------
SqlDbType.Image 存进库都一样都是 varbinary(max)
------解决方案--------------------
1、你可以参考。Net中sql类型对应,数据库的image就是二进制,对应byte[]

2、大部分图片格式以及压缩了,除非你保存的是bmp之类的格式,否则压缩基本无效,不改变大小。
------解决方案--------------------
我之前做的时候,如果图片太大的话,我会把图片放到一个Resource文件中,数据库里存放图片路径,只是不知道这种方法在性能上好不好。