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?

解决方案 »

  1.   

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

  2.   

    SqlDbType.Image 存进库都一样都是 varbinary(max)
      

  3.   

    1、你可以参考。Net中sql类型对应,数据库的image就是二进制,对应byte[]2、大部分图片格式以及压缩了,除非你保存的是bmp之类的格式,否则压缩基本无效,不改变大小。
      

  4.   

    我之前做的时候,如果图片太大的话,我会把图片放到一个Resource文件中,数据库里存放图片路径,只是不知道这种方法在性能上好不好。