做自动升级,把文件存储到数据库里文件也不大,一个没超过1M,一个超过1M,一个超过5M
局域网内部读取都正常select filedata from SC_Upgrade where filename='myexe.exe'外网通过域名连接进来的时候,超过1M的文件就提示超时这个应该怎么解决?不想用socket另外发文件,有好的解决方案吗?
局域网内部读取都正常select filedata from SC_Upgrade where filename='myexe.exe'外网通过域名连接进来的时候,超过1M的文件就提示超时这个应该怎么解决?不想用socket另外发文件,有好的解决方案吗?
解决方案 »
- sql server 数据转存问题
- 请教个关于SQL递归排序的方法
- ms sql server中left join 与 group by 不可以同时使用在一个SQL语句中吗?
- 时间类型问题?
- 请问如何在sql server2000中做到象mysql中的limit功能?
- 请高手帮忙?
- 在ORACLE里面的语法和SQLSERVER不同,如何在SQLSERVER里面实现??
- 我有100个表,N多人都会定期更新这些表,我想知道他们的更新记录。不能在表上建触发器也不能修改表结构
- 如何建立一个自动增加值的字段?
- ODBC中关于Foxpro2.5 for Dos数据库的设置
- 关于 newid()
- 100万条数据的数据库大概有多大呢
是通过程序ado.net连接的
create proc sp_test
as
select filedata from SC_Upgrade where filename='myexe.exe'
go然后在网页调用:
exec sp_test --看看什么情况
压缩代码
ZipInputStream lo_Zip = new ZipInputStream(lo_Stream);
lo_Zip.GetNextEntry(); string lo_Rst = lo_Zip;
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,大文件分几块存储,客户端读取的时候进行拼接,最后写入整体的文件。
这样速度上虽然也不快,但是可以显示个进度条,应该可以接受,因为升级的情况毕竟不多。再次恳请各位大侠发表意见!
1.客户端分析文件,分成若干块,分配固定的内存。设置对应的标记。
2.按照顺序,把对应的块传输到SERVER端。
3.server端接受块,并讲对应的块写入缓存中的临时文件。
4.将临时文件存入数据库中。这样在数据库本机操作,应该不用担心超时问题。
楼主可以参考下。
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();
}
}
关键问题是大文件超时,小文件在外网读取也没有问题回13楼,本机读取没问题,局域网都没问题,就是外网不行,网络传输问题这个当然知道,关键是该怎么解决,谢谢!
貌似是个commandtimeout之类的属性
{
SqlCommand myCommand = new SqlCommand();
myCommand.CommandTimeout = 15;--设置这里
myCommand.CommandType = CommandType.Text;
}