[英]Will connection leak might Cause Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool?
[英]Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool
我上载包含提交的URL的excel工作表时遇到问题,我想将excel的每个记录与db数据匹配,当我上传一个小文件时它可以正常工作,但是如果有2MB的文件,则存在异常:Details 超时已过期。 从池中获取连接之前已经过超时时间。 这可能是因为所有池化连接都在使用中,并且达到了最大池大小。
这是我的代码
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;
}
}
预先感谢您的帮助,将非常感谢大家。
增加最大上传大小
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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.