前言sql
以前經過winform與SQL Server的交互一直侷限於文本、數字等信息,均可以經過string的方式來傳輸,可是好比音樂、圖片等特殊格式的文件要如何與SQL Server數據庫進行交互呢?數據庫
今天主要講經過文件流的方式,將特殊文件轉換成二進制,而後存儲到數據庫中。在實際的應用中,若是文件較大或者較多,直接存儲在數據中會形成必定的壓力,能夠轉爲保存文件名,而後在實際使用的地方調用改文件名對應的文件。數組
主要內容this
上圖爲圖片上傳winform的內容。spa
一、選擇圖片按鈕,功能爲經過對話框選擇要上傳的文件,並將該文件在下面的pictureBox中顯示出來。具體代碼以下:3d
private void btn_Choose_Click(object sender, EventArgs e) { UserMethod.ShowPic(this.pictureBox1); }
1 public static void ShowPic(PictureBox picBox) 2 { 3 OpenFileDialog ofd = new OpenFileDialog(); 4 ofd.InitialDirectory = @"E:\"; 5 ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files(*.*)|*.*"; 6 ofd.RestoreDirectory = true; 7 8 if (ofd.ShowDialog() == DialogResult.OK) 9 { 10 picAddress = ofd.FileName; 11 Image imge = Image.FromFile(picAddress); 12 Bitmap bm = new Bitmap(imge, picBox.Width, picBox.Height); 13 picBox.Image = bm; 14 } 15 }
ShowPic()方法爲靜態方法,能夠直接調用,其中的picAddress變量爲靜態全局變量,用於記錄要上傳文件的文件地址。picturebox顯示圖片的方式,是經過pictbox的image屬性設定的,將圖片轉成Bitmap格式,位圖文件是最簡單的圖片格式。code
二、上傳圖片,該按鈕的功能是將選定的圖片上傳到數據庫中,具體的實現代碼以下:orm
1 private void btn_Upload_Click(object sender, EventArgs e) 2 { 3 if (UserMethod.picAddress == null) 4 { 5 Byte[] pic = UserMethod.GetContent(UserMethod.picAddress); 6 string sql = "insert into tb_MyPic values(@Picture,@PicCategory)"; 7 SqlParameter[] param = new SqlParameter[2]; 8 param[0] = new SqlParameter("@Picture", pic); 9 param[1] = new SqlParameter("@PicCategory", this.cmbCatogery.Text.Trim()); 10 if (DataBase.getExecuteQuery(sql, param) != 0) 11 { 12 MessageBox.Show("添加成功!"); 13 } 14 } 15 else 16 { 17 MessageBox.Show("請先選擇圖片!"); 18 } 19 }
1 public static string picAddress = string.Empty; 2 public static Byte[] GetContent(string filepath)//將指定路徑下的文件轉換成二進制代碼,用於傳輸到數據庫 3 { 4 FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read); 5 Byte[] byData = new Byte[fs.Length];//新建用於保存文件流的字節數組 6 fs.Read(byData, 0, byData.Length);//讀取文件流 7 fs.Close(); 8 return byData; 9 }
上傳的過程大概就是:根據文件地址將對應文件轉換成數據流二進制格式-->編寫對應的SQL語句-->執行該SQL語句,將圖片添加到數據庫中。blog
三、使用sql Parameter[]的SQL執行方法,由於傳統的sql語句對應的value終歸是string或者int之類的格式,能夠在sql語句中寫一下,可是使用Parameter的方式能夠更加簡潔、明瞭、減小失誤。具體的執行sql語句方法參考以下代碼:圖片
1 public static int getExecuteQuery(string sql, SqlParameter[] param) 2 { 3 getcon(); 4 SqlCommand sqlcom = new SqlCommand(sql, My_Conn); 5 sqlcom.Parameters.AddRange(param); 6 return sqlcom.ExecuteNonQuery(); 7 }
OK,下次會跟你們講一下如何從sql數據中下載圖片顯示到winform中來。