当我上传包含提交的网址的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 :(得分: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>