高分求教:把文件存储到数据库里,读取的时候文件稍微大一点就超时,如何解决?

神奇的章鱼哥 2009-08-30 04:31:08
做自动升级,把文件存储到数据库里

文件也不大,一个没超过1M,一个超过1M,一个超过5M
局域网内部读取都正常

select filedata from SC_Upgrade where filename='myexe.exe'

外网通过域名连接进来的时候,超过1M的文件就提示超时

这个应该怎么解决?

不想用socket另外发文件,有好的解决方案吗?
...全文
223 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiequan2 2009-09-05
  • 打赏
  • 举报
回复
public void CreateMySqlCommand() 
{
SqlCommand myCommand = new SqlCommand();
myCommand.CommandTimeout = 15;--设置这里
myCommand.CommandType = CommandType.Text;
}
Yang_ 2009-09-05
  • 打赏
  • 举报
回复
就你那个conn的属性,你改大点就可以了,是以毫秒为单位的
Yang_ 2009-09-05
  • 打赏
  • 举报
回复
ado.net连接有设置查询超时时间的,默认好像才20秒
貌似是个commandtimeout之类的属性
xiequan2 2009-09-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 imwjb 的回复:]
回12楼,通过SqlDataReader读取最早使用,和目前使用的情况一样,这个不是关键问题
关键问题是大文件超时,小文件在外网读取也没有问题

回13楼,本机读取没问题,局域网都没问题,就是外网不行,网络传输问题这个当然知道,关键是该怎么解决,谢谢!
[/Quote]
网络不好,找网管吧,他的职责,程序大多这样写,
神奇的章鱼哥 2009-09-05
  • 打赏
  • 举报
回复
就没有好的办法了吗?
zhangle861010 2009-09-02
  • 打赏
  • 举报
回复
UP
soft_wsx 2009-09-02
  • 打赏
  • 举报
回复
UP
zhouzhijian888 2009-09-02
  • 打赏
  • 举报
回复
up~```
神奇的章鱼哥 2009-09-02
  • 打赏
  • 举报
回复
继续寻找好办法,没有好办法恐怕还得按快存储和读取
JonasFeng 2009-08-31
  • 打赏
  • 举报
回复
你在本机读取难道都有问题吗?
如果没有问题。
那就是网络传输的问题。
这是毋庸置疑的
神奇的章鱼哥 2009-08-31
  • 打赏
  • 举报
回复
回12楼,通过SqlDataReader读取最早使用,和目前使用的情况一样,这个不是关键问题
关键问题是大文件超时,小文件在外网读取也没有问题

回13楼,本机读取没问题,局域网都没问题,就是外网不行,网络传输问题这个当然知道,关键是该怎么解决,谢谢!
xiequan2 2009-08-30
  • 打赏
  • 举报
回复
我们也是把文件存在数据库中,外网下载速度很快的;特征代码是
   public void show() 
{

string ss = Request.QueryString["id"].ToString();
string s3 = "select * from imgpic where id=" + ss;
MySqlCommand comm = new MySqlCommand(s3, conn);
conn.Open();
MySqlDataReader dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
while(dr.Read())
{
Response.Clear();
Response.ClearContent();
Response.BinaryWrite((byte[])dr["myimg"]);//读取
}
Response.End();
conn.Close();
}
}


hui_hui_2007 2009-08-30
  • 打赏
  • 举报
回复
帮顶,个人认为为何必须将升级文件放在数据库中呢?
保存时要转换,取出时要转换吧。
以普通文件存放,数据库中存路径,有什么不可吗?
请教一下
神奇的章鱼哥 2009-08-30
  • 打赏
  • 举报
回复
楼上同志好,上传到服务器这个不用考虑,因为自动升级的文件上传程序是在主机上运行的
现在讨论的就是读取,大一点的文件就得超时。
JonasFeng 2009-08-30
  • 打赏
  • 举报
回复
按块存储的流程过于复杂,而且效率并不一定高,毕竟以前一条记录,现在多条。

个人觉得按块传输的方法楼主也可以考虑下。步骤如下:
1.客户端分析文件,分成若干块,分配固定的内存。设置对应的标记。
2.按照顺序,把对应的块传输到SERVER端。
3.server端接受块,并讲对应的块写入缓存中的临时文件。
4.将临时文件存入数据库中。这样在数据库本机操作,应该不用担心超时问题。

楼主可以参考下。
神奇的章鱼哥 2009-08-30
  • 打赏
  • 举报
回复

RuntimeObject.DB.Open();
DataSet ds = RuntimeObject.DB.exeSqlForDataSet(SqlBuilder.GetSelect("SC_Upgrade",
"filename,filesize,filelastwritetime"));
RuntimeObject.DB.Close();
DataTable dt=ds.Tables[0];
foreach(DataRow dr in dt.Rows)
{
string filename = dr["filename"].ToString().Trim();
long filesize = Convert.ToInt64(dr["filesize"]);
DateTime filelastwritetime = Convert.ToDateTime(dr["filelastwritetime"]);

FileInfo fi = new FileInfo(path + @"\" + filename);
if ((!fi.Exists) || fi.Length != filesize || fi.LastWriteTime != filelastwritetime)
{
RuntimeObject.DB.Open();
object objx = RuntimeObject.DB.exeSqlForOneVal(SqlBuilder.GetSelect("SC_Upgrade", "filedata"
, new FilterParameter("filename", filename)));

RuntimeObject.DB.Close();

byte[] filedata = (byte[])objx;
if (fi.Exists) fi.Delete();
FileStream fs;
fs = fi.Create();

fs.Write(filedata, 0, filedata.Length);
fs.Close();
fi.LastWriteTime = filelastwritetime;
}
}


感谢诸位的意见:
这是我的代码,局域网内实现自动升级没问题,外网接入不行,超过1M就超时
建立VPN连接感觉不方便,客户是中小企业,没有这么大能耐维护这个东西,暂时不考虑
文件压缩的话感觉也不是办法,文件大了再压缩超过1M也正常
用存储过程道理和上面压缩的一样,一个是提高执行效率,一个是减少传输量,应该都不能完全解决文件再大一点的问题——不过我没测试过,可能说得不对,请谅解。
我的思路是要不要按块存储,就是说一块最多存储1M,大文件分几块存储,客户端读取的时候进行拼接,最后写入整体的文件。
这样速度上虽然也不快,但是可以显示个进度条,应该可以接受,因为升级的情况毕竟不多。

再次恳请各位大侠发表意见!
SQL77 2009-08-30
  • 打赏
  • 举报
回复
网络问题,用VPN试试
JonasFeng 2009-08-30
  • 打赏
  • 举报
回复
C#
压缩代码
                 ZipInputStream lo_Zip = new ZipInputStream(lo_Stream);
lo_Zip.GetNextEntry();

string lo_Rst = lo_Zip;
htl258_Tony 2009-08-30
  • 打赏
  • 举报
回复
--写个过程调试一下
create proc sp_test
as
select filedata from SC_Upgrade where filename='myexe.exe'
go

然后在网页调用:
exec sp_test --看看什么情况
JonasFeng 2009-08-30
  • 打赏
  • 举报
回复
建议楼主在存储到数据库之前,先压缩下。

如果文件确实很大,则考虑别的方法。

外网的数据传输,别说1M,就算512K的话,也是很占用带宽的。不像局域网,带宽足够。
加载更多回复(3)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧