本文總結如何在.Net Winform和.Net webform(asp.net)中將圖片存入sqlserver中并讀取顯示的方法 1,使用asp.net將圖片上傳并存入SqlServer中,然后從SqlServer中讀取并顯示出來 一,上傳并存入SqlServer 數據庫結構 create table test { id identity(1,1), FImage image } 相關的存儲過程 Create proc UpdateImage ( @UpdateImage Image ) As Insert Into test(FImage) values(@UpdateImage) GO
在UpPhoto.aspx文件中添加如下: <input id="UpPhoto" name="UpPhoto" runat="server" type="file"> <asp:Button id="btnAdd" name="btnAdd" runat="server" Text="上傳"></asp:Button>
然后在后置代碼文件UpPhoto.aspx.cs添加btnAdd按鈕的單擊事件處理代碼: private void btnAdd_Click(object sender, System.EventArgs e) { //獲得圖象并把圖象轉換為byte[] HttpPostedFile upPhoto=UpPhoto.PostedFile; int upPhotoLength=upPhoto.ContentLength; byte[] PhotoArray=new Byte[upPhotoLength]; Stream PhotoStream=upPhoto.InputStream; PhotoStream.Read(PhotoArray,0,upPhotoLength);
//連接數據庫 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(); }
二,從SqlServer中讀取并顯示出來 在需要顯示圖片的地方添加如下代碼: <asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image>
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() reader.Read(); Response.ContentType="application/octet-stream"; Response.BinaryWrite((Byte[])reader["FImage"]); Response.End(); reader.Close(); } }
3,在winform中將圖片存入sqlserver,并從sqlserver中讀取并顯示在picturebox中
1,存入sqlserver 數據庫結構和使用的存儲過過程,同上面的一樣 1.1,在窗體中加一個OpenFileDialog控件,命名為ofdSelectPic 1.2,在窗體上添加一個打開文件按鈕,添加如下單擊事件代碼: 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("讀取完畢!");
//連接數據庫 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中 2.1 添加一個picturebox,名為ptbShow 2.2 添加一個按鈕,添加如下響應事件: 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=i
|