超时已过期。从池中获取连接之前经过的超时时间

时间:2012-03-03 06:54:08

标签: .net connection-pooling

当我上传包含提交的网址的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;
        }
    }

提前感谢您的帮助,非常感谢所有人。

1 个答案:

答案 0 :(得分: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>