高手来~~c# MySql 存储大文件

本人想把本地文件都存入MySql数据库中,如图片,office文件,还有大文件比如视频。在网上搜索了很多,都说用文件流的方式,我能实现,代码:stringsql="ins... 本人想把本地文件都存入MySql数据库中,如图片,office文件,还有大文件比如视频。在网上搜索了很多,都说用文件流的方式,我能实现,代码:

string sql = "insert into test_file.file_system (picture) values (?a) ";
MySqlCommand MyCommand = new MySqlCommand(sql, MyConnection);
MyCommand.CommandText = sql;

FileStream mystream = new FileStream(str_file, FileMode.Open, FileAccess.Read);
long len = mystream.Length;

MyCommand.Parameters.Add("?a", MySqlDbType.Blob, (int)len, "picture");
MyCommand.Parameters["?a"].Direction = System.Data.ParameterDirection.Input;

byte[] box = new byte[len];
mystream.Read(box, 0, (int)len);
MyCommand.Parameters["?a"].Value = box;
//更新
MyCommand.ExecuteNonQuery();
mystream.Close();

但是,我如果想存大文件,必须把MySql的默认Max Package Size = 1M 改了,改成想要的最大文件,但是如果我有一个10G的文件,仍然用这种方法,把Max Package Size 改成10G,那服务器会崩溃的。。。。。。

问题:有没有办法我不改mysql默认的Max Package Size = 1M ,用流把数据分块,每次1M,这样去插入数据库,跪求思路和代码!
我现在就有30分,如果有思路的,之后全奉上~
展开
 我来答
vim888
2009-12-15 · TA获得超过257个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:333万
展开全部
如果分块的话那我觉得要建立一个表,专门存放这些分块,表的结构为
id 文件的ID号
subVolumeID 文件的分卷号,即:如果该文件有两个分块那么就有1、2两条记录
data 文件的对应分卷号的数据。

在保存文件的时候,先判断需要分多少块,然后以每块一条记录的插入上面所讲的表结构中。
同样,要取的时候就查询此表,然后按照分卷号顺序把文件组合回来即可。

以上就是思路,代码的话可以根据你上面提供的改一下就可以了,不过要注意的是插入记录时要启动事务,避免插入不完整的文件数据。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式