---------------------- ASP.Net+Android+IO開發S、.Net培訓、期待與您交流! ----------------------
第一次寫博文如有不足請多多見諒!
大資料在資料庫中的儲存簡單點就是兩個方法能實現即可 ,一個是把資料上傳到資料庫中 另一個就是把資料從資料庫中取出來
為了方便理解我就舉一個簡單的windows表單應用程式例子實現上傳下載的功能 (電影的上傳與下載)
這個是設計好的介面 具體怎麼做我就不再羅嗦了
我們就先看一下瀏覽的button按鈕是怎麼實現的
private void btnBrowser_Click(object sender, EventArgs e) { OpenFileDialog openDlg = new OpenFileDialog(); openDlg.Filter = "視頻檔案|*.wmv;*.mp4;*.avi"; if (openDlg.ShowDialog() != DialogResult.OK) return; this.lblFileName.Text = openDlg.FileName; //this.mediaPlayer.URL = this.lblFileName.Text; }
這個就是從你的各種儲存介質中擷取的視頻檔案 然後把得到的檔案的完整路徑交給我們的文字框去儲存 留著下面做上傳的時候是非常有用的
接下來就該是重點了 我們的上傳的button按鈕
private void btnUpload_Click(object sender, EventArgs e) { if (this.lblFileName.Text == "") return; if (this.UploadFileToDB(this.lblFileName.Text)) { MessageBox.Show("完成上傳"); } }
看到了沒有 上傳按鈕關於上傳的什麼代碼也沒有僅僅只是調用的一個上傳的方法UploadFileToDB();
private bool UploadFileToDB(string fileName) { string cnnString = "server=.;database=LargeDataDB;uid=sa;pwd=123456"; string cmdText = "usp_Videos_Insert";//這個是預存程序如果要寫成sql語句也是可以的就是把下面的CommandType.StoredProcedure;改為Text即可 SqlConnection cnn = new SqlConnection(cnnString); cnn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = cmdText; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@FileName", SqlDbType.VarChar).Value = fileName.Substring(fileName.LastIndexOf(@"\")+1);//擷取檔案的名字 FileStream stream = new FileStream(fileName, FileMode.Open);//建立一個檔案流 byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); stream.Close(); cmd.Parameters.Add("@Data", SqlDbType.Image).Value = buffer;//把擷取到的位元據給預存程序中的Data參數 int rowCount = cmd.ExecuteNonQuery(); cnn.Close(); if (rowCount > 0) { return true; } else { return false; } }
如果是檔案太大最好再加上多線程的技術 能避免主線程的死結
接下來我們再看看 下載的功能
private void btnDownload_Click(object sender, EventArgs e) { int id = int.Parse(this.txtID.Text); string fileName = this.DownFileFromDB(id); if (fileName != string.Empty) { this.mediaPlayer.URL = fileName;//把擷取到的 } }
也是調用了一個下載DowmFileFromDB();方法
private string DownFileFromDB(int id) { string cnnString = "server=.;database=LargeDataDB;uid=sa;pwd=master"; string cmdText = "select FileName,Data from Videos where ID=@ID";//這裡面的參數是通過ID來擷取想要下載的檔案 SqlConnection cnn = new SqlConnection(cnnString); cnn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = cmdText; cmd.CommandType = CommandType.Text; cmd.Parameters.Add("@ID", SqlDbType.Int).Value = id; SqlDataReader reader = cmd.ExecuteReader(); string fileName = string.Empty; byte[] buffer = null; while (reader.Read()) { fileName = (string)reader["FileName"]; fileName = "D:\\" + fileName; buffer = (byte[])reader["Data"]; FileStream stream = new FileStream(fileName, FileMode.Create);//把從資料庫中取出來的位元據寫入硬碟之中 stream.Write(buffer,0,buffer.Length); stream.Close(); } return fileName; }
好了上傳下載就到這裡了我們來看一看效果此文僅僅是為了實現上傳下載的功能代碼有點簡陋沒有把使用分層結構去實現,望大家見諒!這個不僅僅可以存放視頻 資料庫中的 image類型可以存放所有的二進位檔案 。此文僅為拋磚引玉 大牛的設計不知道比我的好多少呢 謝謝大家的支援!
---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------
詳細請查看:http://edu.csdn.net