net在sqlserver中的圖片存取技術(例子在管理里inoutimg)

字號:

本文總結如何在.Net WinForm和.Net WebForm(asp.net)中將圖片存入SQL Server中并讀取顯示的方法 。
    1.使用asp.net將圖片上傳并存入SQL Server中,然后從SQL Server中讀取并顯示出來:
    1)上傳并存入SQL Server
    數(shù)據(jù)庫結構
    create table test
    {
    id identity(1,1),
    FImage image
    }
    相關的存儲過程
    Create proc UpdateImage
    (
    @UpdateImage Image
    )
    As
    Insert Into test(FImage) values(@UpdateImage)
    GO
    在UpPhoto.aspx文件中添加如下:
    然后在后置代碼文件UpPhoto.aspx.cs添加btnAdd按鈕的單擊事件處理代碼:
    private void btnAdd_Click(object sender, System.EventArgs e)
    {
    //獲得圖象并把圖象轉(zhuǎn)換為byte[]
    HttpPostedFile upPhoto=UpPhoto.PostedFile;
    int upPhotoLength=upPhoto.ContentLength;
    byte[] PhotoArray=new Byte[upPhotoLength];
    Stream PhotoStream=upPhoto.InputStream;
    PhotoStream.Read(PhotoArray,0,upPhotoLength);
    //連接數(shù)據(jù)庫
    SqlConnection conn=new SqlConnection();
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    SqlCommand cmd=new SqlCommand("UpdateImage",conn);
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
    cmd.Parameters["@UpdateImage"].Value=PhotoArray;
    //如果你希望不使用存儲過程來添加圖片把上面四句代碼改為:
    //string strSql="Insert into test(FImage) values(@FImage)";
    //SqlCommand cmd=new SqlCommand(strSql,conn);
    //cmd.Parameters.Add("@FImage",SqlDbType.Image);
    //cmd.Parameters["@FImage"].Value=PhotoArray;
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
    }
    2)從SQL Server中讀取并顯示出來
    在需要顯示圖片的地方添加如下代碼:
    ShowPhoto.aspx主體代碼:
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!Page.IsPostBack)
    {
    SqlConnection conn=new SqlConnection()
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    string strSql="select * from test where id=2";//這里假設獲取id為2的圖片
    SqlCommand cmd=new SqlCommand(strSql,conn);
    conn.Open();
    SqlDataReader reader=cmd.ExecuteReader();
    reader.Read();
    Response.ContentType="application/octet-stream";
    Response.BinaryWrite((Byte[])reader["FImage"]);
    Response.End();
    reader.Close();
    }
    }
    2.在WinForm中將圖片存入SQL Server,并從SQL Server中讀取并顯示在picturebox中
    1),存入SQL Server
    數(shù)據(jù)庫結構和使用的存儲過過程,同上面的一樣
    首先,在窗體中加一個OpenFileDialog控件,命名為ofdSelectPic ;
    然后,在窗體上添加一個打開文件按鈕,添加如下單擊事件代碼:
    Stream ms;
    byte[] picbyte;
    //ofdSelectPic.ShowDialog();
    if (ofdSelectPic.ShowDialog()==DialogResult.OK)
    {
    if ((ms=ofdSelectPic.OpenFile())!=null)
    {
    //MessageBox.Show("ok");
    picbyte=new byte[ms.Length];
    ms.Position=0;
    ms.Read(picbyte,0,Convert.ToInt32(ms.Length));
    //MessageBox.Show("讀取完畢!");
    //連接數(shù)據(jù)庫
    SqlConnection conn=new SqlConnection();
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    SqlCommand cmd=new SqlCommand("UpdateImage",conn);
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
    cmd.Parameters["@UpdateImage"].Value=picbyte;
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
    ms.Close();
    }
    }
    2)讀取并顯示在picturebox中
    首先,添加一個picturebox,名為ptbShow
    然后,添加一個按鈕,添加如下響應事件:
    SqlConnection conn=new SqlConnection();
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    string strSql="select FImage from test where id=1";
    SqlCommand cmd=new SqlCommand(strSql,conn);
    conn.Open();
    SqlDataReader reader=cmd.ExecuteReader();
    reader.Read();
    MemoryStream ms=new MemoryStream((byte[])reader["FImage"]);
    Image image=Image.FromStream(ms,true);
    reader.Close();
    conn.Close();
    ptbShow.Image=image