2012-03-03 83 views
0

我上傳包含提交的url的excel表單時遇到問題,我想將excel的每個記錄與db數據進行匹配,在上傳小文件時工作正常它是好的,但如果有2MB文件,則有例外:詳細信息 超時已過期。在從池中獲取連接之前已超時。發生這種情況的原因可能是因爲所有連接池都在使用中,並且達到最大池大小。超時已過期。從池中獲取連接之前超時時間已過去

這裏是我的代碼

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     if ((txtFilePath.HasFile)) 
     { 

      OleDbConnection conn = new OleDbConnection(); 
      OleDbCommand cmd = new OleDbCommand(); 
      OleDbDataAdapter da = new OleDbDataAdapter(); 
      DataSet ds = new DataSet(); 
      string query = null; 
      string connString = ""; 
      string strFileName = DateTime.Now.ToString("sddMMyyyy_LOFTY"); 
      string strFileType = System.IO.Path.GetExtension(txtFilePath.FileName).ToString().ToLower(); 

      //Check file type 
      if (strFileType == ".xls" || strFileType == ".xlsx") 
      { 
       txtFilePath.SaveAs(Server.MapPath("~/AdminCpanel/UploadedExcel/" + strFileName + strFileType)); 
      } 
      else 
      { 
       lblMessage.Text = "Only excel files allowed"; 
       lblMessage.ForeColor = System.Drawing.Color.Red; 
       lblMessage.Visible = true; 
       return; 
      } 

      string strNewPath = Server.MapPath("~/AdminCpanel/UploadedExcel/" + strFileName + strFileType); 

      //Connection String to Excel Workbook 
      if (strFileType.Trim() == ".xls") 
      { 
       connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strNewPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; 
      } 
      else if (strFileType.Trim() == ".xlsx") 
      { 
       connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strNewPath + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\""; 
      } 

      // Sheet name is Ads Posted 
      query = "SELECT * FROM [Ads Posted$]"; 
      //Create the connection object 
      conn = new OleDbConnection(connString); 
      //Open connection 
      if (conn.State == ConnectionState.Closed) conn.Open(); 
      //Create the command object 
      cmd = new OleDbCommand(query, conn); 
      da = new OleDbDataAdapter(cmd); 
      ds = new DataSet(); 
      da.Fill(ds, "validateLog"); 


      //// Sheet name is Details 
      //query = "SELECT * FROM [Details$]"; 
      ////Create the connection object 
      //conn = new OleDbConnection(connString); 
      ////Open connection 
      //if (conn.State == ConnectionState.Closed) conn.Open(); 
      ////Create the command object 
      //cmd = new OleDbCommand(query, conn); 
      //da = new OleDbDataAdapter(cmd); 
      //DataSet dsdetails = new DataSet(); 
      //da.Fill(dsdetails, "Details"); 

      DateTime dtStartdate =Convert.ToDateTime(txtFromDate.Text); 
      DateTime dtEndDate = Convert.ToDateTime(txtEndDate.Text); 






      DataColumn dColumn = new DataColumn(); 
      dColumn.DataType = System.Type.GetType("System.String"); 
      dColumn.ColumnName = "Status"; 
      ds.Tables[0].Columns.Add(dColumn); 


      bool flag = false; 
      if (ds.Tables[0].Rows.Count > 0) 
      { 

       RegistrationDB db = new RegistrationDB(); 
       DataTable dtAds = db.GetPostedAdstoValidate(ds.Tables[0].Rows[1]["LoftyID"].ToString()); 
       //excel sheet 
       for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
       { 
        if (Convert.ToDateTime(ds.Tables[0].Rows[i]["Date"].ToString()) <= dtEndDate && Convert.ToDateTime(ds.Tables[0].Rows[i]["Date"].ToString()) >= dtStartdate) 
        { 
         //db table 
         for (int z = 0; z < dtAds.Rows.Count; z++) 
         { 


          if (ds.Tables[0].Rows[i]["LoftyAddURL"].ToString() == dtAds.Rows[z]["URL"].ToString()) 
          { 
           ds.Tables[0].Rows[i]["Status"] = "Validated!"; 
           flag = true; 
           break; 
          } 
          else if (ds.Tables[0].Rows[i]["IPAddress"].ToString() == dtAds.Rows[z]["IPAddress"].ToString()) 
          { 
           ds.Tables[0].Rows[i]["IPAddress"] = "Valid IP!"; 
           flag = true; 
           break; 
          } 

          flag = false; 
         } 
        } 
        else 
        { 
         flag = true; 
         ds.Tables[0].Rows[i]["Status"] = "Date does not lie between Project start and end date!"; 
         ds.Tables[0].Rows[i]["IPAddress"] = "InvalidIP/EmptyIP"; 

        } 
        if (!flag) 
         ds.Tables[0].Rows[i]["Status"] = "Not Validated!"; 
         //ds.Tables[0].Rows[i]["IPAddress"] = "Invalid IP"; 

       } 

      } 

      //ds.Tables[0].Columns.Remove("F5"); 
      //ds.Tables[0].Columns.Remove("F6"); 
      //ds.Tables[0].Columns.Remove("F7"); 
      grvExcelData.DataSource = ds.Tables[0]; 
      grvExcelData.DataBind(); 
      //dump to database for logging 
      ViewState["MyGridViewDate"]=ds.Tables[0]; 
      for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
      { 
       RegistrationDB dump = new RegistrationDB(); 
       string Loftyid = ds.Tables[0].Rows[i]["Loftyid"].ToString(); 
       string Date = ds.Tables[0].Rows[i]["Date"].ToString(); 
       string LoftyAddURL = ds.Tables[0].Rows[i]["LoftyAddURL"].ToString(); 
       string Status = ds.Tables[0].Rows[i]["Status"].ToString(); 
       string Addno = ds.Tables[0].Rows[i]["Addno"].ToString(); 
       string IPAddress = ds.Tables[0].Rows[i]["IPAddress"].ToString(); 
       dump.CreateLogValidation(Loftyid, Date, LoftyAddURL, Status, Addno,IPAddress); 
      } 




      lblMessage.Text = "Data retrieved successfully! Total Recodes:" + ds.Tables[0].Rows.Count; 
      lblMessage.ForeColor = System.Drawing.Color.Green; 
      lblMessage.Visible = true; 

      //da.Dispose(); 
      //conn.Close(); 
      // conn.Dispose(); 
     } 
     else 
     { 
      lblMessage.Text = "Please select an excel file first"; 
      lblMessage.ForeColor = System.Drawing.Color.Red; 
      lblMessage.Visible = true; 
     } 
    } 

感謝提前的幫助,將是非常感謝所有。

+0

您不處置OleDb對象。這將工作一段時間,取決於GC運行的頻率。或者不是,就像例外說的那樣。 – 2012-03-03 17:21:58

回答

1

增加最大上載大小

4MB的默認設置是在machine.config中,但你可以在你的web.config覆蓋它。例如,爲了擴大上傳限制爲20MB,你可以這樣做:

<system.web> 
    <httpRuntime executionTimeout="240" maxRequestLength="20480" /> 
    </system.web> 

由於最大請求大小限制是爲了保護您的網站,這是最好的擴展文件大小限制爲特定的目錄,而比你的整個應用程序。這是可能的,因爲web.config允許級聯覆蓋。您可以將web.config文件添加到僅包含上述內容的文件夾,或者您可以使用主web.config中的標記實現相同的效果:

<location path="Upload"> 
    <system.web> 
    <httpRuntime executionTimeout="110" maxRequestLength="20000" /> 
    </system.web> 
    </location> 
相關問題