您的位置:首页 > 大数据

大数据在数据库中的存储

2013-07-09 20:07 176 查看
大数据在数据库中的存储简单点就是两个方法能实现即可 ,一个是把数据上传到数据库中 另一个就是把数据从数据库中取出来 

为了方便理解我就举一个简单的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类型可以存放所有的二进制文件 。此文仅为抛砖引玉 大牛的设计不知道比我的好多少呢 谢谢大家的支持!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 上传 下载