大数据在数据库中的存储

本文介绍了一个使用Windows窗体应用程序实现视频文件在数据库中的上传与下载功能的实例,包括浏览、上传和下载的具体代码实现。


大数据在数据库中的存储简单点就是两个方法能实现即可 ,一个是把数据上传到数据库中 另一个就是把数据从数据库中取出来 

为了方便理解我就举一个简单的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类型可以存放所有的二进制文件 。此文仅为抛砖引玉 大牛的设计不知道比我的好多少呢 谢谢大家的支持!




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值