把文件存储到sql数据库中,然后取出生成原来的文件。其实说白了就是用数据库进行文件的中转吧!例如:把一个word文档存储到数据库,然后可以原样的取出来!
此文只是做一个随笔记录,如果能帮助到别人实感欣慰!---------------------------不喜勿喷
//发送文件
private void tlsbtnFileSend_Click(object sender, EventArgs e)
{
//打开文件对话框
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//获取要打开的文件的路径
string path = openFileDialog1.FileName;
//获取文件名
string fileName = Path.GetFileName(path);
//读取文件中的二进制数据
byte[] filesdata = File.ReadAllBytes(path);
int Count = Convert.ToInt32(filesdata.Length) / 1024;
//创建Sql语句@filename,@filedata 参数占位符
string sql = "insert into fileData(SENDFILEDATA,SENDFILEDATANAME,DATASENDER,DATASENDERNAME,DATARECIVER,DATARECIVERNAME,DATAFIILESTUTA,DATAADDTIME) values(@SENDFILEDATA,@SENDFILEDATANAME,@DATASENDER,@DATASENDERNAME,@DATARECIVER,@DATARECIVERNAME,@DATAFIILESTUTA,@DATAADDTIME)";
//创建命令
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();//打开
string FileSendTimes = DateTime.Now.ToString();//获取时间
//创建占位符 对应的参数
SqlParameter[] param ={
new SqlParameter("@SENDFILEDATA",filesdata),//发送的文件数据
new SqlParameter("@SENDFILEDATANAME",fileName),//发送的文件名字
new SqlParameter("@DATASENDER",SendUserID),//发送人ID
new SqlParameter("@DATASENDERNAME",SendUsersName),//发送人名字
new SqlParameter("@DATARECIVER",UserID ),//接收人ID
new SqlParameter("@DATARECIVERNAME",UserNames),//接收人ID
new SqlParameter("@DATAFIILESTUTA","-1"),//文件接收状态
new SqlParameter("@DATAADDTIME",FileSendTimes)//文件接收时间
};
cmd.Parameters.AddRange(param);//将参数和cmd绑定
cmd.ExecuteNonQuery();//执行Sql语句 数据将添加到数据库中
conn.Close();//关闭
MessageBox.Show("文件发送完毕!");
}
}
/// <summary>
/// 接收文件的函数
/// </summary>
/// <param name="FileID">数据库中文件的ID</param>
/// <param name="FileNames">文件名字</param>
private void SaveFiles(int FileID, string FileNames)
{
saveFileDialog1.FileName = FileNames;//文件默认的名称
if (saveFileDialog1.ShowDialog() == DialogResult.OK)//打开
{
string path = saveFileDialog1.FileName;//获取保存文件名
string sql = "select * from fileData where SENDFILEID=" + FileID;
SqlCommand cmd = new SqlCommand(sql, conn);//创建命令
conn.Open();//打开数据库
//创建读取器
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection | CommandBehavior.SequentialAccess);
//关闭Reader同时关闭连接| 设置读取二进制数据
while (reader.Read())//循环读取
{
//获取列中的二进制数据 返回数据
byte[] data = reader.GetSqlBytes(1).Value;
//将数据写出到文件中
File.WriteAllBytes(path, data);
}
reader.Close();//关闭
MessageBox.Show("接收完毕!");
}
}

本文介绍了一种利用SQL数据库存储文件的方法,并演示了如何通过C#代码将文件存储为二进制数据并从数据库中恢复的过程。文章包括发送文件到数据库及从数据库接收文件的完整示例。

被折叠的 条评论
为什么被折叠?



