处理数据库中的图片

     技术要点:ASP.NET2.0实现添加图片到数据库中和从数据库中读取图片并显示图片等功能。
  
     首先,通常用两种方法来向数据库存放图片,一是把图片的二进制信息存入数据库,二是在数据库中存放保存图片的路劲。 两种方法各有优缺点。

需要掌握的要点:
    
     1.编写存储过程。
           CREATE ALTER PROCEDURE Pr_AddPicture
           (
              @PictureDesn varchar(200),       /*定义图片说明参数*/
              @PictureType varchar(100),       /*定义图片类型参数*/
              @PictureData imag                /*定义图片数据参数*/

           )
           AS
           INSERT INTO Picture (PictureDesn,PictureType,PictureData) VALUES(@PictureDesn,@PictureType,@PictureData)
           RETURN @@Identity    /*返回最后一次插入的主键值。*/)

           ALTER PROCEDURE Pr_GetSinglePicture

           ( @PictureID int)
           AS
           SELECT * FROM Picture WHERE
PictureID=@PictureID

      2.建立数据访问层类  PictureDB

       public class PictureDB
{

    private readonly string ConnectionString;
    //用该方法来获取web.config里面的 ConnectionString.
    public PictureDB() { ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); } 
   
    public int AddPicture(String sPictureDesn, byte[] bPictureData, String sPictureType)
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
       
        SqlCommand myCommand = new SqlCommand("Pr_AddPicture", conn);
        myCommand.CommandType = CommandType.StoredProcedure;
       
        SqlParameter parameterPictureDesn = new SqlParameter("@PictureDesn", SqlDbType.VarChar, 50);
        parameterPictureDesn.Value = sPictureDesn;
        myCommand.Parameters.Add(parameterPictureDesn);

        SqlParameter parameterPictureData = new SqlParameter("@PictureData", SqlDbType.Image);
        parameterPictureData.Value = bPictureData;
        myCommand.Parameters.Add(parameterPictureData);

        SqlParameter parameterPictureType = new SqlParameter("@PictureType", SqlDbType.VarChar, 50);
        parameterPictureType.Value = sPictureType;
        myCommand.Parameters.Add(parameterPictureType);

        SqlParameter parameterPictureID= new SqlParameter("@PictureID", SqlDbType.Int,4);
        parameterPictureID.Direction = ParameterDirection.ReturnValue;
        myCommand.Parameters.Add(parameterPictureID);

        try
        {
            conn.Open();
        }
        catch (System.Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        try
        {
            myCommand.ExecuteNonQuery();
        }
        catch (System.Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        finally{
            if (conn.State==ConnectionState.Open){
                conn.Close();
            }
        }
        return (int)parameterPictureID.Value;
    }

    public SqlDataReader GetSinglePicture(int nPictureID)
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
        SqlCommand myCommand = new SqlCommand("Pr_GetSinglePicture", conn);
        myCommand.CommandType = CommandType.StoredProcedure;

        SqlParameter parameterPictureID = new SqlParameter("@PictureID", SqlDbType.Int, 4);
        parameterPictureID.Value = nPictureID;
        myCommand.Parameters.Add(parameterPictureID);
        SqlDataReader dr = null;
        try
        {
            conn.Open();
        }
        catch (System.Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        try
        {
            dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch (System.Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        return dr;
    }
 
}

       从这里可以总结出 怎样 在ASP.net中执行存储过程并实行参数传递.牢记。

       3.第三个重点就是怎样将图片转换成二进制并保存在数据库里。
 
            PictureDB picture = new PictureDB();
            Stream pictureStream = upfile.PostedFile.InputStream;     //该对象指向一个上载文件,以准备读取该文件的内容
            byte[] pictureData = new byte[upfile.PostedFile.ContentLength];    //ContentLength以字节为单位,获取上载文件大小。
            try
            {
                pictureStream.Read(pictureData, 0, upfile.PostedFile.ContentLength);  // 开始读取文件。
                pictureID = picture.AddPicture(FileName.Text.Trim(), pictureData, upfile.PostedFile.ContentType);
                sucessMessage.Text = "上传文件成功";
               
            }
   
        4.第四部就涉及到怎样将图片输出了,需要将数据库里的二进制数据读取出来并以图像的方式显示出来。这里我们用到了一个image控件,
          讲该控件的ImageUrl属性指定为一个aspx页面,并在这个页面的pageload事件里写读取图像数据并显示。该事件代码:
  
         protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["PictureID"] != null)   //这里用到了页面传值。ImageUrl就该写成 ~/showpicture.aspx?PictureID=
            {
                PictureDB picture = new PictureDB();
                SqlDataReader recp = picture.GetSinglePicture(Int32.Parse(Request.QueryString["PictureID"].ToString()));
                byte[] PictureData = null;
                recp.Read();
               
                PictureData = (byte[])recp["PictureData"];
                Response.ContentType = recp["PictureType"].ToString();   //控制输出文件类型
               
                recp.Close();
                this.EnableViewState = false;        //在提交服务器后是否保存页面状态。

                Response.AppendHeader("Content-Length", PictureData.Length.ToString());    //向HTTP流中写入Content-Length
                Response.BinaryWrite(PictureData);     //像是图片的二进制数据。
                Response.End();
            }
          


到这就基本完成了!

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值