读excel图片到数据库和上传图片到数据库

//引用Excel命名空间

        using Excel;

        //......

        //下面从test.xls中的2,2格复制图片到剪贴板,然后从剪贴板读取图片并显示到pictureBox1中。

        private void btnGetImageFromExcel_Click(object sender, EventArgs e)

        {

            //初始化excel对象

            Excel.Application excel = new Excel.Application();

            //打开xls文件(注意:后面的参数都用Type.Missing填充,表示使用参数的默认值)

            excel.Workbooks.Open(@"D:\Documents and Settings\xrwang\桌面\test.xls", System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);

            //选定到第2行第2列所在的单元格

            Range r = (Range)excel.Cells[2, 2];

            r.Select();

            //将单元格复制到剪贴板中

            r.CopyPicture(XlPictureAppearance.xlScreen, XlCopyPictureFormat.xlBitmap);

            //退出excel

            excel.Quit();

            //判断剪贴板中是否存在图片,如果存在,则将图片显示到pictureBox1中

            if (Clipboard.ContainsImage())

            {

                Image image=Clipboard.GetImage();

                pictureBox1.Image = image;

            }

        }

 

 

 

 

 

 

 

Image转成Byte[]的问题把我这个入门级的Asp.Net用户快要搞晕了,费了很大的劲,查了很多的文章,终于搞定了,把方法写出来,希望能帮助遇到同样问题的人.

 

程序目的是做一个可以上传照片,然后生成缩略图,把缩略图保存到数据库image字段中,供显示照片时动态显示输出.

我把关键代码列出来:

//下面是根据上传的文件,产生缩略图,然后保存到数据库image表中(为将问题简单化,这里把表的字段做了减少).

        string fstr = FileUpload1.PostedFile.FileName; ;//上传的文件名
        string fmime = FileUpload1.PostedFile.ContentType;//文件的MIME类型
        string sql;
        int fsize = FileUpload1.PostedFile.ContentLength; //文件大小
       
        //利用Bitmap类获得图像的尺寸
        Bitmap bmp = new Bitmap(fstr);
        int imgH = bmp.Height;
        int imgW = bmp.Width;
        //缩略图保持原图片比例,计算出大小
        float simg1,simg2;
        if (imgW > imgH)
        {
            //横向图片
            simg1 = 100;
            simg2 = simg1/imgW * imgH;
        }
        else
        {
            //纵向图片
            simg2 = 100;
            simg1 = simg2/imgH * imgW;
        }

        //生成缩略图
        System.Drawing.Image smallimg = bmp.GetThumbnailImage((int)simg1, (int)simg2, null, IntPtr.Zero);
        MemoryStream ms = new MemoryStream();
        smallimg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将图像保存到内存流中
        byte[] data ={ }; //建立一个字节数组,用于保存图像数据
        data=ms.ToArray();//把流的数据保存到数组
        fsize = (int)ms.Length;//流数据大小

        //生成SQL语句,因为使用了字节数组,必须使用带参数的SQL,否则无法执行,@1就是参数
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
        conn.Open();
        sql = "insert into [image] (itype,imagedata,isize) values('" + fmime + "',@1," + fsize + ")";
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add(new SqlParameter("@1", SqlDbType.Image));
        cmd.Parameters["@1"].Value = data;
        int count = cmd.ExecuteNonQuery();

 

//下面是动态显示图像数据

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
        conn.Open();
        string sql = "select * from [image] where id=1"; //这里id使用的是1,实际可以根据需要传一个值
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.CommandTimeout = 60;
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            Response.ContentType = dr["itype"].ToString().Trim();
            //输出图片文件二进制数据
            Response.OutputStream.Write((byte[])dr["imagedata"], 0, (int)dr["isize"]);
            Response.End();
        }

 

/*补充说明:

*连接数据库部分的代码可以做成一个类,供多次引用,而不必要每次重复地写出来.

*如果要将动态显示出来的图像用一个Image控件显示出来的话,可以把动态显示数据的代码做成一个单独的文件例

*如"showimage.aspx",然后将Image的src地址写为"showimage.aspx",如果需要动态显示多个图像,可以给"showimage.aspx"传参数进

*去,改变id的值即可.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kexijun20014/archive/2009/12/31/5111749.aspx

posted @ 2010-06-29 13:45  Daniel_Lu  阅读(473)  评论(0编辑  收藏  举报