private void Button3_Click(object sender, System.EventArgs e)
{
tring Conn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("view.mdb")+";";
OleDbConnection myconn=new OleDbConnection(Conn);
myconn.Open();
string st="DELETE FROM produce WHERE 记录编号 IN (SELECT MAX(记录编号) FROM produce GROUP BY 物资名称,数量,规格型号,下达时间,编号,单价 HAVING COUNT(记录编号)>1)";
OleDbCommand cmd=new OleDbCommand(st,myconn);
cmd.CommandTimeout=0;
cmd.ExecuteNonQuery();
Response.Write("<script language='javascript'>alert('OK!');<"+"/"+"script>");
myconn.Close();
}
代码如上,用来删除数据库中可能存在的重复数据,其中"记录编号"为自动序号.正确编译通过,数据库中有好几万条记录,所以执行起来非常缓慢,有朋友说等个10多分钟估计才可以,但是大概在5分钟左右页面没完全打开就出现"无页面显示,HTTP出现错误了".请问如何让页面一直不超时呢?
还有我想3000条一次查询应该怎么修改语句?
承情高手分析下那段SQL语句在内存中的大致执行情况,提供各种优化方案及页面不超时方案,我查到一个Server.ScriptTimeout,但是不知道该放到哪个地方,分不够再加!

解决方案 »

  1.   

    数据大了
    用sql吧,SQL + 存储过程 + 缓存 + 索引
    应该很快的
      

  2.   

    我暂时不会索引,公司催得急,我也只有这次过了慢慢改,那先请教下怎么页面不超时方案?我查到一个Server.ScriptTimeout,但是不知道该放到哪个地方
      

  3.   

    你看看把Sql语句运行在查询分析器的时间,要多少,如果时间很长,应该要考虑优化
      

  4.   

    用sql server数据库
    连接 不要使用OleDbConnection
    应该
    using System.Data.SqlClient;SqlConnection conn=new SqlConnection(myconn); SqlCommand cmd=new SqlCommand(st,myconn);
      

  5.   

    this.Server.ScriptTimeout?各位,这样使用对不对?
      

  6.   

    那也太慢了。誰能忍受呀! 
     应该要考虑sql語句优化  試試把in 改成 EXISTS ! 
     
      

  7.   

    Server.ScriptTimeout = 600 //设为十分钟
      

  8.   

    应该说楼主的SQL语句写的是很标准的。
    你看看这样行不!"DELETE FROM produce WHERE 记录编号 IN (SELECT MAX(记录编号) FROM produce GROUP BY 物资名称+数量+规格型号+下达时间+编号+单价 HAVING COUNT(记录编号)>1)"